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
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:
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.
| columna | regla |
|---|---|
| nombre | NOT NULL |
| categoria | NOT NULL |
| precio | NOT NULL |
| stock | NOT 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
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.
CREATE TABLE categorias_practica.id INTEGER PRIMARY KEY.nombre TEXT NOT NULL.Solución razonada
CREATE TABLE categorias_practica (
id INTEGER PRIMARY KEY,
nombre TEXT NOT NULL
);La clave identifica cada fila y NOT NULL obliga a proporcionar un nombre conocido.
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 NULLprotege las escrituras.- Úsalo para datos realmente obligatorios.
- No impide textos vacíos ni valores incorrectos por sí solo.
IS NOT NULLes un filtro, no una restricción.