Метод all будет делать выборку из бд и создавать модели. В случае, если их много и вам, например, нужно посчитать количество, то будет большое использование памяти. Так что лучше скоупы
Запятую пропустили.
scope :with_images, lambda { joins(:images).where("images.project_id IS NOT NULL") }
И да, при использовании inner join дополнительная проверка на "Не нул" лишняя.
> 1000000 в СЕКУНДУ
По вашей же ссылке:
> Миллион одновременных соединений на Node.js
Таки немного разные понятия