====== is [not] distinct from ======
===== Версии сервера =====
^ 1.0 ^ 1.5 ^ 2.0 ^ 2.1 ^ 2.5 ^ 3.0 ^
| Нет | Нет | Да | Да | Да | Да |
===== Доступно в =====
[[raznovidnosti_jazyka_sql|DSQL]], [[raznovidnosti_jazyka_sql|ISQL]], [[raznovidnosti_jazyka_sql|PSQL]]
===== Формат =====
Value1 is [not] distinct from Value2
===== Описание =====
Тестирование различия (is distinct from) или отсутствия различия (is not distinct from) двух значений.
Два операнда признаются различными, если имеют разные значения, либо если одно из них NULL, а второе не NULL.
И наоборот: два операнда не являются различными, если они имеют одинаковое значение, либо если оба они являются NULL.
Таким образом, сравнение двух значений с помощью is not distinct from в целом подобно их сравнению на равенство ( = ) за исключением случая, когда в сравнении участвует NULL.
Операция сравнения на равенство ( = ) может возвратить три результата: истину, ложь и NULL. Последнее случается, если любой из операндов сравнения сам является NULL. Хотя в логическом контексте NULL эквивалентно лжи, тем не менее это отдельное (третье) состояние.
Тестирование же на отсутствие различий (is not distinct from) всегда возвращает либо истину, либо ложь. В частности, если один и только один из операндов является NULL, то результатом будет ложь (зафиксировано различие). А если оба операнда NULL - тогда истина (зафиксировано отсутствие различий).
Аналогичные рассуждения верны в отношении пары операторов неравенства (<>) и различия (is distinct from).
Если на поле существует индекс то он может быть использован при is NOT DISTINCT
===== Примеры, возвращающие "истину" =====
1 is not distinct from 1
1 is distinct from 0
1 is distinct from NULL
NULL is not distinct from NULL