"And I think the difference between retrieve and retrieve_all should be obvious just by looking at the name."
itub's explanation was very lucid, and I just want to elaborate a little bit on the quoted comment of his.
Other than the obvious difference implicated by the naming, the real concern is performance. It would be quite unwise to do a retrieve_all, when you only care about couple of rows. Indeed the underlying data system might support batch fetch, for example Oracle, this provides the opportunity to fully utilize this and similar kind of functionalities, in the actual implementation, to gain the best performance.