Do joins prevent N+1 queries? By itself, no. joins does not load data from the relationship into memory: accessing columns from the relationship will trigger N+1 queries. For example, notice all of the additional queries when accessing the Comment relationship: Post.joins(:comments).where(:comments => {author: 'Derek'}).map { |post| post.comments.size } Post Load (1.2ms) SELECT "posts".* FROM "pos