El concepto del valor NULL
es una fuente
común de confusión para los recién llegados a SQL, que
frecuentemente piensan que NULL
es lo mismo
que una cadena de caracteres vacía ''
. Esto
no es así. Por ejemplo, las siguientes sentencias son
completamente diferentes:
mysql> INSERT INTO my_table (phone) VALUES (NULL); mysql> INSERT INTO my_table (phone) VALUES ('');
Ambas sentencias insertan un valor en la columna
phone
, pero la primera inserta un valor
NULL
y la segunda una cadena vacía. El
significado de la primera se puede traducir por “el
número de teléfono no es conocido”, y el significado de
la segunda es “se sabe que la persona no tiene teléfono,
y por tanto, no hay número de teléfono.”
Para ayudarle con la gestión de NULL
, tiene
disponibles los operadores IS NULL
y
IS NOT NULL
y la función
IFNULL()
.
En SQL, el valor NULL
nunca da verdadero al
compararlo con otro valor, aún cuando este valor sea también
NULL
. Una expresión que contiene
NULL
siempre produce un valor
NULL
a menos que se indique lo contrario en
la documentación de los operadores y funciones implicadas en la
expresión. Todas las columnas en el siguiente ejemplo retornan
NULL
:
mysql> SELECT NULL, 1+NULL, CONCAT('Invisible',NULL);
Si quiere buscar valores de columna que son
NULL
, no puede utilizar una comprobación
expr = NULL
. La siguiente sentencia no
retorna registros, porque expr = NULL
nunca
es verdadero para cualquier expresión:
mysql> SELECT * FROM my_table WHERE phone = NULL;
Para buscar valores NULL
debe utilizar la
comprobaciónIS NULL
. Las siguientes
sentencias muestran como encontrar el número de teléfono
NULL
y el vacío:
mysql> SELECT * FROM my_table WHERE phone IS NULL; mysql> SELECT * FROM my_table WHERE phone = '';
Puede añadir una columna índice que tenga valores
NULL
si utiliza MySQL 3.23.2 o superiores, o
si está utilizando los motores de almacenamiento
MyISAM
, InnoDB
, o
BDB
. A partir de MySQL 4.0.2, el motor de
almacenamiento MEMORY
también tiene soporte
para valores NULL
en los índices. Si no es
así, todas las columnas de índice deben ser declaradas como
NOT NULL
y usted no podrá insertar un valor
NULL
en la columna.
Cuando lee datos con LOAD DATA INFILE
, las
columnas vacías o inexistentes se rellenan con
''
. Si quiere un valor
NULL
en una columna, usted deberá utilizar
\N
en el archivo de datos. La palabra exacta
“NULL
” puede ser también
utilizada en algunas circunstancias. Consulte
Sección 13.2.5, “Sintaxis de LOAD DATA INFILE
”.
Cuando utiliza DISTINCT
, GROUP
BY
, o ORDER BY
, todos los valores
NULL
son tratados como iguales.
Cunado utilice ORDER BY
, los valores
NULL
son mostrados al principio, o al final
si se especifica DESC
para ordenar de manera
descendiente. Excepción: De MySQL 4.0.2 hasta 4.0.10, los
valores NULL
se muestran primeros
independientemente del orden.
Las funciones de agregación (resumen) como
COUNT()
, MIN()
, y
SUM()
ignoran los valores
NULL
. La excepción a esto es
COUNT(*)
, que cuenta filas y no valores de
columna individuales. Por ejemplo, la siguiente sentencia
produce dos conteos. El primero es un recuento del número de
registros en la tabla, y el segundo un recuento del número de
valores diferentes a NULL
en la columna
age
:
mysql> SELECT COUNT(*), COUNT(age) FROM person;
En algunos tipos de columnas, MySQL gestiona los valores
NULL
de manera especial. Si inserta un valor
NULL
en una columna
TIMESTAMP
, se insertan la fecha y hora
actual. Si inserta un valor NULL
en una
columna entera que tiene el atributo
AUTO_INCREMENT
, se inserta el siguiente
número en la secuencia.
É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.