Привет .
Я Михаил, fullstack-разработчик, занимаюсь интернет-проектами: от сайтов до систем автоматизации.
Отправить мне сообщение

PostgreSQL и сравнение полей с NULL

Привет.

Это заметка об использовании NULL в WHERE-выражениях в PostgreSQL.

NULL обычно означает, что значение неизвестно. Это не ноль, и не false. И даже не пустое значение. 

Допустим, в миске у котика 0 граммов корма, то есть она пустая. Да, тогда котику не позавидуешь. 

Но если вы идёте в гости к другу, и у него есть котик, то вы наверняка не знаете, сколько корма в миске его котика. То есть в миске котика друга NULL корма.

Так вот, если вы выполните запрос SELECT amount FROM miska WHERE amount = NULL, то будете всегда получать отрицательный результат. Почему так происходит? Да потому что происходит сравнение значения с NULL, но чисто логически NULL не является значением. 

Поэтому правильным запросом для получения пустых мисок будет SELECT amount FROM miska WHERE amount IS NULL.