To retrieve an object by association, you choose an object that you already have, and one of its associations. You then get the associated object(s).
To retrieve an object from the database, you don’t have to choose an object that you already have.
A retrieve from DB mean that you will retrieve an object commited in the DB. With a retrieve by association you can retrieve an object not yet commited.
So if you change an object, and not commit that object. And after you retrieve that object by association you will see the change that you have made. but if you retrieve it from DB, you will either not retrieve a object at all (if that object has never been commited) or retrieve the object but before the change that you have made.