relacionales prioridad operadores operador logicos ejemplos diferente aritmeticos sql null boolean-logic ansi-sql

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 | +---------+---------+---------+---------+