Note, this select statement does not return the same animals as the first one, for example, the lion did not appear in the
first result.

This begs the question: why is that?

The answer is rather trivial: I have previously put a primary key on the name column:

alter table animals add primary key (name);

... and when a select is made against the primary key's columns (in this case: only name), Oracle will get the names from the index
rather than the table itself. This, by the way, is the reason why the names appear alphabetically sorted in the first query.