user u
JOIN tasks t ON t.user_id = u.id AND t.status != 'COMPLETED';
Или
JOIN tasks t ON t.user_id = u.id
WHERE t.status != 'COMPLETED';
Полагаю первый будет оптимальнее, но возможно postgres делает какие-то оптимзации?
https://img.ifunny.co/images/e2d751ac285dd373b6987b9ebd602c4fa845c4b614914760a73287851d061e1e_1.webp (Нет, оптимизатору вообще всё равно).
Для внутреннего соединения хоть в where всё запиши, он все равно тебя поймет.
Для inner join разницы нет. А для left join получишь разные результаты с фильтром после on (все строки из левой таблицы сджойнятся с правой таблицей с учётом фильтра) и фильтром в where (будут отброшены строки, не проходящие фильтр).
Обсуждают сегодня