Вопрос проверяет понимание работы с NULL-значениями в SQL при фильтрации строк по условию.
NULL в SQL обозначает отсутствие значения, а не пустое значение или ноль. Это важное отличие: NULL не участвует в обычных сравнениях. Любое сравнение с NULL (например, column = NULL) возвращает не TRUE или FALSE, а UNKNOWN. Поэтому WHERE-условие, содержащее такое сравнение, не включит строки с NULL в результат.
Для проверки на NULL используются специальные операторы:
IS NULL — возвращает TRUE, если значение равно NULL.IS NOT NULL — возвращает TRUE, если значение не равно NULL.Если нужно обработать NULL как конкретное значение, применяется функция COALESCE, которая возвращает первое ненулевое значение из списка.
Рассмотрим таблицу employees с полем salary, где некоторые записи могут иметь NULL (например, для стажёров).
-- Неправильно: не вернёт строки с NULL salary
SELECT * FROM employees WHERE salary < 50000;
-- Правильно: учитываем NULL
SELECT * FROM employees WHERE salary < 50000 OR salary IS NULL;
-- Использование COALESCE для замены NULL
SELECT name, COALESCE(salary, 0) AS effective_salary
FROM employees
WHERE COALESCE(salary, 0) < 50000;При фильтрации строк с возможными NULL-значениями всегда используйте IS NULL/IS NOT NULL или COALESCE, чтобы избежать неявного исключения строк из результата. Это особенно важно в отчётах и аналитике, где пропуск данных может исказить выводы.