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.
