El valor NULL en MySQL

El valor NULL es especial. Equivale a «ningún valor» o «valor desconocido», por lo que no puede compararlo con valores conocidos como haría con dos valores normales. Si intenta usar NULL con los operadores de comparación aritméticos convencionales, el resultado sería indefinido:

mysql> SELECT NULL < 0, NULL = 0, NULL <> 0, NULL > 0;

NULL < 0 NULL = 0 NULL <> 0 NULL > 0
NULL NULL NULL NULL

De hecho, no puede comparar NULL con si mismo ya que el resultado de comparar dos valores desconocidos no se puede determinar:

mysql> SELECT NULL = NULL, NULL <> NULL;

NULL = NULL NULL <> NULL
NULL NULL

Para buscar valores NULL, debe utilizar una sintaxis especial. En lugar de usar =, <> o !=, debe emplear IS NULL o IS NOT NULL. Por ejemplo, para los presidentes vivos, su fecha de defunción se representa como NULL en la tabla president. Para buscarlos, utilice la siguiente consulta:

mysql> SELECT last_name, first_name FROM president WHERE death IS NULL;

last_name first_name
Carter James E.
Bush George H.W.
Clinton William J.
Bush George W.

Para buscar valores no NULL, utilice IS NOT NULL. La siguiente consulta busca nombres con sufijo:

mysql> SELECT last_name, first_name, suffix
-> FROM president WHERE suffix IS NOT NULL;

last_name first_name suffix
Carter James E. Jr.

El operador de comparación <=> específico de MySQL funciona incluso con comparaciones entre NULL. Las dos consultas anteriores se podrían escribir de esta forma:

SELECT last_name, first_name FROM president WHERE death <=> NULL;

SELECT last_name, first_name, suffix
FROM president WHERE NOT (suffix <=> NULL);

Comparte