Я просто не вижу функциональной и плавной причины, по которой нулевые значения нельзя сравнивать с другими значениями или другими нулевыми значениями, поскольку мы можем четко сравнить их и сказать, что они одинаковы или нет в нашем контексте. Это забавно. Просто из-за некоторых логических выводов и последовательности мы должны постоянно с этим беспокоиться. Это не функционально, сделайте его более функциональным и предоставьте философам и ученым возможность сделать вывод, является ли оно последовательным или нет и содержит ли оно «универсальную логику». :) Кто-то может сказать, что это из-за индексов или чего-то еще, я сомневаюсь, что эти вещи не могут быть сделаны для поддержки нулей, таких же как значения. Это то же самое, что сравнивать два пустых бокала, один - бокал для вина, а другой - бокал для пива, мы не сравниваем типы объектов, а значения, которые они содержат, так же, как вы могли бы сравнить int и varchar, с нулем это еще проще, это ничего и что два ничто имеют общее, они одинаковы, сравнимо явно со мной и всеми, кто пишет sql, потому что мы постоянно нарушаем эту логику, сравнивая их странным образом из-за некоторых стандартов ANSI. Почему бы не использовать компьютерную мощность, чтобы сделать это для нас, и я сомневаюсь, что это замедлило бы ситуацию, если бы все, что связано, строилось с учетом этого. «Это не ноль, это ничто», это не яблоко, это apfel, давай ... Функционально это твой друг, и здесь тоже есть логика. В конце концов, единственное, что имеет значение, - это функциональность, и использование нулей таким образом приносит более или менее функциональность и простоту использования. Это более полезно?
Рассмотрим этот код:
SELECT CASE WHEN NOT (1 = null or (1 is null and null is null)) THEN 1 ELSE 0 end
Кто из вас знает, что вернет этот код? С или без, он возвращает 0. Для меня это не работает, и это сбивает с толку. В c # это все, как и должно быть, операции сравнения возвращают значение, логически это тоже создает значение, потому что если нет, сравнивать нечего (кроме. :)). Они просто «сказали»: все, что равно нулю, «возвращает» 0, и это создает много обходных путей и головных болей.
Это код, который привел меня сюда:
where a != b OR (a is null and b IS not null) OR (a IS not null and b IS null)
Мне просто нужно сравнить, если два поля (где) имеют разные значения, я мог бы использовать функцию, но ...