I just found this ticket because I noticed the same issue.
The official response was that it's not a bug because when you use
:joins you are "riding close to the metal". But I'm at a loss as to
figure out why this behavior even needs to exist.
Every table (except HABTM links) in a typical Rails app is going to
have an id column, so that means any JOIN by default is going to be
clobbering ids. Most of the useful ad-hoc attributes that you would
want to add to an query would have to be specified in the :select
option anyway... how often do you just want to glom on all the
attributes of some other table directly?
A default of SELECT table_name.* in the presence of a :joins option
just seems to make sense all around. Is there some benefit to always
using SELECT * that warrants using it as the default even when it
opens the door for such dangerous and unexpected behavior?
At the very least the documentation for :joins should say "always
specify :select or else..."