sql - logicos - prioridad de operadores aritmeticos
Operador booleano de SQL estándar IS vs. operador igual(=) (2)
En la página de Wikipedia para SQL hay algunas tablas de verdad sobre la lógica booleana en SQL. [1] La página de Wikipedia parece obtener el estándar SQL: 2003.
La tabla de verdad para el operador igual (=) es diferente del operador IS del borrador SQL: 2003.
Además, el artículo de Wikipedia señala que "IS NULL" (<null predicate>) es un caso especial.
En el SQL: 2003 parece que hay un operador "IS" que es un operador regular como AND, NOT y OR. Sin embargo, el <predicado nulo> todavía está allí.
¿Por qué está el <predicado nulo> cuando el IS es un operador booleano regular? ¿Es para asegurarse de que puede utilizar la construcción "IS NULL" con valores no booleanos sin coersión de tipo? ¿Se desaconseja el uso de "= NULL"?
¿El estándar SQL: 2011 funciona de manera diferente?
[1]: Wikipedia en SQL
[2]: SQL: 2011 borrador PDF página 335
[3]: SQL: 2003 borrador PDF página 397
Como dijo el cartel de arriba, null = null
no es correcto. Devolverá NULL (falso)
Para una comparación nula debe usar IS NULL
o IS NOT NULL
.
Eso es nuevo para mí.
Si leí correctamente, la gramática <boolean value expression>
define tres predicados exclusivamente para su uso con el boolean
datos boolean
IS TRUE
, IS FALSE
, IS UNKNOWN
.
Estos difieren de sus contrapartes de igualdad en que solo se evalúan como True
o False
. Nunca a lo Unknown
. ie UNKNOWN = TRUE
se evaluaría como UNKNOWN
pero UNKNOWN IS TRUE
evalúa como False
.
Las tablas de verdad completas para IS
y =
están abajo.
+---------+-------+-------+---------+
| IS | TRUE | FALSE | UNKNOWN |
+---------+-------+-------+---------+
| TRUE | TRUE | FALSE | FALSE |
| FALSE | FALSE | TRUE | FALSE |
| UNKNOWN | FALSE | FALSE | TRUE |
+---------+-------+-------+---------+
Opuesto a
+---------+---------+---------+---------+
| = | TRUE | FALSE | UNKNOWN |
+---------+---------+---------+---------+
| TRUE | TRUE | FALSE | UNKNOWN |
| FALSE | FALSE | TRUE | UNKNOWN |
| UNKNOWN | UNKNOWN | UNKNOWN | UNKNOWN |
+---------+---------+---------+---------+