AddForce is used for apply a force follow the physics rules.
MovePosition is used in order to move the rigidbody without follow the physics rules, but still interacting properly with other colliders. Basically Rigidbody.MovePosition(a) its the same than transform.position = a, but keeping the physics interactions.
For an horizontal move if you Add a force in right direction, you will add a velocity to your rigidbody and when you stop, it still will be moving unitl it speed drops (if it has some drag). With MovePosition it will be moved to the position u asked for ignoring mass, current velocity and any physics (and without modify them).
For jump you would like to use AddForce() 99% of times, since you want a realistic physics jumps…
I won’t explain more. Just test the attached scene to this post. Gameobject A (red )uses MovePosition(), GameObject B (green) uses AddForce(). Move them with your arrow and you will realize about what I mean.
B may seems pretty uncontrollable, but setting it speed and rigidbody drag to different values you can get other results. Try it.