El valor NULL
puede resultar un poco
desconcertante hasta que se comienza a utilizar.
Conceptualmente, NULL
significa valor
inexistente o desconocido, y es tratado de forma diferente a
otros valores. Para verificar que un valor es
NULL
, no se pueden emplear operadores de
comparación aritmética como =
,
<
, o <>
. Para
comprobar esto, intente la siguiente consulta:
mysql> SELECT 1 = NULL, 1 <> NULL, 1 < NULL, 1 > NULL; +----------+-----------+----------+----------+ | 1 = NULL | 1 <> NULL | 1 < NULL | 1 > NULL | +----------+-----------+----------+----------+ | NULL | NULL | NULL | NULL | +----------+-----------+----------+----------+
Claramente, no se obtienen valores significtivos a partir de
estas comparaciones. Use en su lugar los operadores
IS NULL
y IS NOT NULL
:
mysql> SELECT 1 IS NULL, 1 IS NOT NULL; +-----------+---------------+ | 1 IS NULL | 1 IS NOT NULL | +-----------+---------------+ | 0 | 1 | +-----------+---------------+
Observe que en MySQL, 0
o
NULL
se intepretan como falso, y cualquier
otro valor, como verdadero. El valor por defecto para una
operación booleana es 1
.
Este tratamiento especial de NULL
es debido
a que, en la sección anterior, fue necesario determinar qué
animales ya no estaban vivos utilizando death IS NOT
NULL
en lugar de death <>
NULL
.
Dos valores NULL
son considerados iguales
por la cláusula GROUP BY
.
Cuando se realiza un ORDER BY
, los valores
NULL
se presentan en primer lugar si se
emplea ORDER BY ... ASC
, y al final si se
ordena con ORDER BY ... DESC
.
Un error muy común cuando se trabaja con valores
NULL
es asumir que es imposible insertar un
valor cero o una cadena vacía en una columna definida como
NOT NULL
, pero no es así. Los mencionados
son efectivamente valores, mientras que
NULL
significa "no hay un valor".
Puede comprobar esto fácilmente empleando IS [NOT]
NULL
como se muestra aquí:
mysql> SELECT 0 IS NULL, 0 IS NOT NULL, '' IS NULL, '' IS NOT NULL; +-----------+---------------+------------+----------------+ | 0 IS NULL | 0 IS NOT NULL | '' IS NULL | '' IS NOT NULL | +-----------+---------------+------------+----------------+ | 0 | 1 | 0 | 1 | +-----------+---------------+------------+----------------+
Por lo tanto, es totalmente posible insertar cadenas vacias o
ceros en columnas marcadas como NOT NULL
,
ya que son valores NOT NULL
. Consultar
Sección A.5.3, “Problemas con valores NULL
”.
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.