The 2nd method runs in parallel to your main update loops. The yields in it are set to delay minimally, so that loop will move your object far more quickly.
Another difference to watch for with coroutines:
If the game object is ever disabled, the Coroutine will be killed. If the game object is then re-enabled, the Coroutine will not resume unless you start it up again manually. That would not be an issue when moving the object within Update().