

Oracle такой.
SELECT * FROM dual WHERE NULL=null; --no rows returned
На самом деле, это свойство SQL в целом, а не только Oracle.
Так обстоит дело в SQL (как языке логики), потому что null означает неизвестное / неопределенное.
Однако в языках программирования (например, C++ или C#) нулевой указатель / ссылка - это конкретное значение с определенным значением - ничего.
Два ничего эквивалентны, но два неизвестных - нет. Путаница возникает из-за того, что для обеих концепций используется одно и то же имя (null).
Есть находятся некоторые языки программирования с нулевым распространением. Например VB.Net msmvps.com/blogs/bill/archive/2007/09/07/c-defies-logic.aspx
MySQL имеет нулевой безопасный оператор равенства, <=>, который возвращает истину, если обе стороны равны или обе стороны равны нулю. См. Документы MySQL.
+1 Интересно, но это, наверное, должен был быть комментарий к ответу SQL
Вы можете заставить рубин работать таким образом:
class Null
def self.==(other);false;end
end
n=Null
print "Null equals nothing" if n!=Null
@Hugh: Ну, можно так сказать, но это является возможно, а это значит, что люди будут это делать ... хорошо это или плохо - другой вопрос.
В ruby значение null называется nil, а значение NULL не определяется при отправке кода. Однако вполне возможно сделать то, что здесь подразумевается, набрав: class NilClass; def ==(o); false; end; end
Вау @ormuriauga - вы поймали опечатку двухлетней давности. Фиксированный. Теперь он создает Null, который не равен самому себе, как задан вопрос.
В VB6 выражение Null = Null будет производить Null вместо True, как и следовало ожидать.
Это вызовет ошибку времени выполнения, если вы попытаетесь назначить его логическому типу, однако, если вы его используете
в качестве условия «If ... Then» он будет действовать как False. Кроме того, Null <> Null будет также
производим Null, поэтому:
В VB6 можно сказать, что Null не равен себе (или чему-либо еще) и не неравен!
Вы должны проверить это с помощью функции IsNull().
VB6 также имеет другие особые значения:
Nothing для объектных ссылок. Nothing = Nothing - ошибка компиляции. (вы должны сравнивать это, используя "is")Missing для необязательных параметров, которые не были указаны. У него нет буквального представления, поэтому вы даже не можете написать Missing = Missing. (тест IsMissing(foo))Empty для неинициализированных переменных. Этот тестирует себя, хотя есть также, функция IsEmpty().Я помню, как мне немного противно VB.
VB.Net также имеет нулевое распространение. Нулевое распространение сбивает с толку, но если у вас вообще будут типы, допускающие значение NULL, можно утверждать, что кошка вышла из мешка, и вам следует распространять NULL. msmvps.com/blogs/bill/archive/2007/09/07/c-defies-logic.aspx
В C# Nullable <bool> имеет интересные свойства по отношению к логическим операторам, но оператор равенства такой же, как и другие типы в этом языке (т. Е. ((Bool?) Null == (bool?) Null) == true) .
Чтобы сохранить поведение короткозамкнутый короткозамкнутых логических операторов и сохранить согласованность с не короткозамкнутыми логическими операторами, логическое значение, допускающее значение NULL, имеет некоторые интересные свойства. Например: true || null == true. false && null == false и т. д. Это находится в прямом противоречии с другими языками трехзначной логики, такими как ANSI SQL.
В C# есть и другие интересные особенности. Для некоторых значений x и y x==y верно, но x<=y неверно. Что, кажется, довольно сложно защитить. msmvps.com/blogs/bill/archive/2007/09/07/c-defies-logic.aspx
В SQL вам нужно будет сделать что-то вроде:
WHERE column is NULL
скорее, чем
WHERE column = NULL
Не язык, но NaN с плавающей запятой тоже не равен самому себе.