I recently stumbled upon a nice description about Rails’ joins and includes difference.

When to use joins?

If you’re just filtering results, but not accessing those results later in the code.

Car.joins(:parts).where(parts: { tire_size: '275/45R20"' }).map { |car| car.make }
=> "Volvo", "Audi", "BMW" ...

When to use includes?

IF you need to eager load (avoid N+1) associated records.

Post.includes(:comments)