Почему не работает фильтрация в "left join"?

Есть рабочий код, который выбирает список сообщений и процитированные сообщения (если есть):

select messages.*, m2.text quoted_text
from messages
left join messages m2 on messages.quoted_message_id = m2.id;

Код работает как нужно, но есть нюанс.... Код выше всегда ищет в таблице процитированное сообщение, даже если quoted_message_id равен null. А это, как по мне, странно. Тогда я добавила условие messages.quoted_message_id IS NOT NULL вот так:

select messages.*, m2.text quoted_text
from messages
left join messages m2 on messages.quoted_message_id IS NOT NULL and  messages.quoted_message_id = m2.id;

Но это не помогло. Постгря всё равно ищет процитированные сообщения и ей плевать на фильтр. Что я делаю не так? И как решить такую задачу или не в ту сторону вообще мыслю и что-то делаю?


Ответы (0 шт):