Я не спрашиваю , если. Я знаю, что это не так.
Мне любопытно, почему. Я прочитал документы поддержки, такие как о работе с нулями в MySQL, но на самом деле они не дают никаких оснований. Они только повторяют мантру, которую вы должны использовать вместо "null".
Это всегда беспокоило меня. Когда вы выполняете динамический SQL (те редкие времена, когда это нужно сделать), было бы намного проще передать "null" в where where так:
@where = "where GroupId = null"
Это будет простая замена обычной переменной. Вместо этого мы должны использовать if/else блоки для создания таких вещей, как:
if @groupId is null then
@where = "where GroupId is null"
else
@where = "where GroupId = @groupId"
end
В более сложных задачах, это огромная боль в шее. Существует ли конкретная причина, по которой SQL и все основные производители RDBMS этого не допускают? Какой-то конфликт ключевых слов или конфликт значений, которые он создал?
Edit:
Проблема с множеством ответов (на мой взгляд) заключается в том, что каждый настраивает эквивалентность между нулем и "я не знаю, что это за значение". Там огромная разница между этими двумя вещами. Если null означает "там значение, но неизвестно", я бы 100% согласился с тем, что nulls не могут быть равными. Но SQL null не означает этого. Это означает, что существует значение нет. Любые два результата SQL, которые являются нулевыми, не имеют значения. Нет значение не равно неизвестно. Две разные вещи. Это важное различие.
Изменить 2:
Другая проблема, которую я имею, заключается в том, что другие HLL разрешают null = null совершенно нормально и разрешают ее соответствующим образом. В С#, например, null = null возвращает true.