Никогда не делай, FROM (SELECT * FROM table)
, просто делай FROM table
, то же самое относится и к LEFT JOIN
. То, что вы написали, является просто слишком многословным
SELECT animal_name
FROM animals
LEFT JOIN owners_animals
USING ( animal_id )
WHERE owner_id IS NULL;
С учетом вышесказанного мне часто нравится опция NOT EXISTS()
, потому что она удерживает фрагмент owner_id IS NULL
.
USING (foo)
совпадает с foo = foo
в объединенных таблицах, за исключением того, что только один из них будет в наборе результатов.