Есть ли разница между IS NULL и = NULL? - PullRequest
37 голосов
/ 23 сентября 2010

Я удивлен, увидев, что IS NULL и = NULL дают разные результаты в запросе выбора. В чем разница между ними? Когда использовать что. Я был бы рад, если бы вы могли объяснить мне подробно.

Ответы [ 3 ]

40 голосов
/ 23 сентября 2010

= NULL всегда unknown (это часть логики 3 состояний), но предложение WHERE обрабатывает его как false и удаляется из набора результатов.Поэтому для NULL вы должны использовать IS NULL

Причины описаны здесь: Почему NULL = NULL оценивается как ложное в SQL-сервере

10 голосов
/ 23 сентября 2010

Добавление к существующим ответам зависит от того, включен ли ANSI_NULLS или нет при использовании "= NULL".

-- This will print TRUE
SET ANSI_NULLS OFF;
IF NULL = NULL
    PRINT 'TRUE'
ELSE
    PRINT 'FALSE'

-- This will print FALSE
SET ANSI_NULLS ON;
IF NULL = NULL
    PRINT 'TRUE'
ELSE
    PRINT 'FALSE'
2 голосов
/ 23 сентября 2010

из-за трехзначной логики SQL:

http://en.wikipedia.org/wiki/Null_%28SQL%29#Three-valued_logic_.283VL.29

Извлечение соответствующего абзаца:

Испытания

Нуль был в центре противоречий и источником дискуссия из-за связанной с ней трехзначной логики (3VL), специальной требования к его использованию в соединениях SQL и особая обработка требуется агрегатными функциями и операторами группировки SQL. компьютер Профессор науки Рон ван дер Мейден суммировал следующие вопросы: «Несоответствия в стандарте SQL означают, что это невозможно приписывать любую интуитивную логическую семантику обработке нулей в SQL. "Хотя различные предложения были сделаны для решения этих проблемы, сложность альтернатив помешала их широкое распространение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...