Diseño de tablas · datos obligatorios

NOT NULL

NOT NULL impide guardar una fila cuando una columna obligatoria no recibe un valor conocido.

Lectura: 5–7 minEjemplo comprobadoPráctica con pistas
Contenido de esta guía

Qué garantiza NOT NULL

NOT NULL es una restricción de columna. Indica que cada fila debe almacenar un valor conocido en esa columna. Una inserción o actualización que intente dejarla en NULL debe rechazarse.

La regla protege la calidad mínima del dato, pero no comprueba que el valor sea útil. Un texto vacío puede seguir siendo un valor válido para el motor si no existen otras restricciones.

Cómo se declara

Definición de tabla
CREATE TABLE productos (
  id INTEGER PRIMARY KEY,
  nombre TEXT NOT NULL,
  precio DECIMAL(10, 2) NOT NULL
);

Declara NOT NULL cuando una fila no puede interpretarse sin ese dato. Antes de aplicarlo a una tabla existente, revisa y corrige las filas que ya contienen valores ausentes.

NOT NULL e IS NOT NULL cumplen funciones distintas. La restricción controla escrituras futuras; el filtro IS NOT NULL selecciona filas durante una consulta.

Ejemplo guiado

La tabla educativa exige nombre, categoría, precio y stock para cada producto. Esta inserción omite el nombre obligatorio:

Inserción inválida
INSERT INTO productos
  (id, categoria, categoria_id, precio, stock)
VALUES
  (99, 'Accesorios', 1, 29.90, 5);

El motor rechaza la fila porque nombre está declarado como NOT NULL. La solución no consiste en inventar un texto cualquiera, sino en obtener el nombre correcto antes de insertar.

Ejemplo de columnas obligatorias
columnaregla
nombreNOT NULL
categoriaNOT NULL
precioNOT NULL
stockNOT NULL

Error frecuente

Hacer obligatorias todas las columnas

Una restricción debe reflejar una regla real. Un segundo teléfono o una nota interna pueden ser opcionales. Forzar valores ficticios como «N/A» dificulta los filtros, las estadísticas y la comprensión del dato ausente.

Comprueba lo aprendido

Básica · diseño de tabla

Exige un nombre para cada categoría

Escribe una definición de tabla llamada categorias_practica con una columna id entera como clave primaria y una columna nombre de texto que no admita NULL.

Compatibilidad entre motores

La restricción NOT NULL es común, pero la forma de añadirla o retirarla en una tabla existente cambia entre motores y versiones. SQLite 3.53.0 o posterior admite ALTER TABLE ... ALTER COLUMN ... SET NOT NULL y DROP NOT NULL; en versiones anteriores de SQLite y para otros cambios de esquema no soportados puede ser necesario reconstruir la tabla. Además, algunos comportamientos históricos de claves primarias no son idénticos. Revisa la documentación del motor antes de una migración.

Qué debes recordar

  • NOT NULL protege las escrituras.
  • Úsalo para datos realmente obligatorios.
  • No impide textos vacíos ni valores incorrectos por sí solo.
  • IS NOT NULL es un filtro, no una restricción.

Conceptos relacionados

Fuentes técnicas consultadas