NULL en bases de datos relacionales
Lección 1.6 · Tiempo de lectura: ~6 min · Tareas de práctica ↓
NULL es la marca especial que usan las bases de datos relacionales cuando un valor falta, es desconocido o no se aplica. En esta lección aprenderás qué significa NULL, qué no es, por qué lo necesitan las bases de datos, qué columnas pueden contenerlo y por qué, con NULL, la base responde «desconocido» en lugar de «sí» o «no».
En las lecciones anteriores vimos tablas, filas, columnas y tipos de datos. Cada celda de una tabla guarda un valor del tipo de su columna, salvo cuando no hay ningún valor que guardar.
¿Qué significa NULL?
NULL no es un valor, sino una marca: indica que la celda no tiene valor. El motivo puede variar: el valor es desconocido, no se aplica a esa fila o simplemente todavía no existe.
NULL en una tabla
La tabla rental de la base de datos Sakila guarda los alquileres de películas. Un alquiler solo recibe su return_date cuando la película vuelve, así que hasta entonces la celda es NULL:
| rental_id | rental_date | return_date |
|---|---|---|
| 14098 | 2005-08-21 00:30:32 | NULL |
| 14469 | 2005-08-21 13:07:24 | 2005-08-24 10:37:24 |
| 14626 | 2005-08-21 18:35:44 | 2005-08-25 23:54:44 |
El alquiler 14098 no se ha devuelto: su fecha de devolución todavía no existe. No es «cero» ni «una fecha vacía»: simplemente no hay nada.
Lo que NULL no es
- NULL no es 0. El cero es un número real: un precio 0 significa «gratis», un precio NULL significa «el precio es desconocido».
- NULL no es una cadena vacía.
''es un texto sin caracteres; es un valor conocido. NULL significa que no hay ningún texto. - NULL no es la palabra 'NULL'. El texto
'NULL'es una cadena normal de cuatro letras. - NULL no es false. En la lógica de las bases de datos, NULL significa «desconocido», no «no».
¿Por qué las bases de datos usan NULL?
Sin NULL, cada valor ausente necesitaría un sustituto inventado como 0, '' o 1900-01-01, y esos sustitutos se confunden con los datos reales. NULL cubre de forma honesta los casos típicos:
- Desconocido: un cliente no dio su número de teléfono.
- No aplicable: una persona física no tiene CIF de empresa.
- Todavía no conocido: un alquiler no tiene fecha de devolución hasta que la película vuelve.
¿Qué columnas pueden contener NULL?
Si una columna admite NULL se decide al diseñar la tabla. Una columna declarada NOT NULL siempre debe tener un valor: en rental, la rental_date es obligatoria, mientras que la return_date puede quedar vacía. Una clave primaria nunca puede ser NULL: una fila siempre tiene que poder identificarse.
Una buena regla: permite NULL solo donde la falta de valor tiene sentido de verdad y declara todo lo demás como NOT NULL.
NULL en los cálculos
Si una expresión usa NULL, el resultado suele ser NULL también, porque un valor desconocido hace desconocido todo el resultado:
10 + NULLes NULL.5 * NULLes NULL.- El número de días entre la fecha de un alquiler y una fecha de devolución NULL es NULL: el alquiler aún no ha terminado.
Lógica de tres valores
Normalmente una condición es verdadera o falsa. Con NULL aparece una tercera respuesta: UNKNOWN («desconocido»). ¿Se devolvió el alquiler 14098 antes del 25 de agosto? Su fecha de devolución es desconocida, así que la respuesta honesta es «desconocido».
Lo mismo pasa al comparar NULL con NULL: no se sabe si dos valores desconocidos son iguales, así que NULL = NULL también es UNKNOWN, no verdadero. Por eso las bases de datos tienen comprobaciones especiales para NULL en lugar de las comparaciones habituales; las usarás cuando empieces a escribir consultas.
Conclusiones clave:
- NULL marca un valor ausente: desconocido, no aplicable o todavía no conocido.
- NULL no es 0, ni una cadena vacía, ni el texto 'NULL', ni false.
- Las columnas declaradas NOT NULL y las claves primarias no pueden contener NULL; las demás columnas sí.
- Los cálculos con NULL suelen dar NULL.
- Las comparaciones con NULL dan un tercer resultado lógico, UNKNOWN; incluso NULL = NULL es UNKNOWN.
Preguntas frecuentes
¿NULL es lo mismo que una cadena vacía?
No. Una cadena vacía '' es un valor de texto conocido con cero caracteres. NULL significa que no hay ningún valor.
¿NULL es igual a NULL?
No en el sentido habitual. Cada NULL representa un valor desconocido, y no se puede demostrar que dos valores desconocidos sean iguales, así que comparar NULL con NULL da UNKNOWN.
¿Cualquier columna puede contener NULL?
Una columna de cualquier tipo -número, texto o fecha- puede contener NULL, salvo que la tabla lo prohíba con NOT NULL. Las columnas de clave primaria nunca admiten NULL.
Preguntas de entrevista
¿Cómo explicarías NULL en una entrevista?
NULL es una marca de valor ausente: desconocido, no aplicable o todavía no conocido. No es cero, ni una cadena vacía, ni false, y sigue sus propias reglas: los cálculos con NULL devuelven NULL y las comparaciones con él devuelven UNKNOWN.
¿Qué es la lógica de tres valores?
En SQL una condición puede ser TRUE, FALSE o UNKNOWN. UNKNOWN aparece siempre que una comparación incluye NULL, porque la base de datos no puede saber si un valor desconocido cumple la condición.
¿Por qué una clave primaria no puede ser NULL?
La clave primaria identifica una fila. Un identificador desconocido no puede hacerlo: dos filas con clave NULL no se podrían distinguir, por eso las bases de datos rechazan NULL en las columnas de clave primaria.