🎯 Quedan pocos días este mes Apoya SQLTest.online y ayúdanos a mantener la práctica de SQL gratuita para todos. Dona hoy →
Código SQL copiado al portapapeles

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.

Ilustración que muestra NULL como un valor ausente o desconocido en las columnas de una base de datos relacional

¿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_idrental_datereturn_date
140982005-08-21 00:30:32NULL
144692005-08-21 13:07:242005-08-24 10:37:24
146262005-08-21 18:35:442005-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 + NULL es NULL.
  • 5 * NULL es 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.

Intenta resolver las siguientes tareas para reforzar lo que aprendiste en esta lección.

  1. ¿Qué celdas contienen NULL?
  2. Cálculos con NULL
  3. Aclarar Valores NULL