El síntoma: una columna obligatoria recibe NULL
NOT NULL expresa que una columna no puede almacenar NULL. PostgreSQL y SQLite la documentan como una restricción de columna que se comprueba cuando se insertan o modifican filas.
Si falla, revisa el dato que llega a esa columna y el camino que lo produjo: una columna omitida sin valor predeterminado, un NULL explícito o una actualización que borra un valor existente.
Ejemplo reproducible: el nombre es obligatorio
CREATE TABLE productos (
id INTEGER PRIMARY KEY,
nombre TEXT NOT NULL,
activo INTEGER NOT NULL DEFAULT 1
);
INSERT INTO productos (id, nombre)
VALUES (1, NULL);La columna nombre está presente en el INSERT, pero su valor es explícitamente NULL. La base debe rechazarlo porque contradice la regla declarada.
Corrige el origen del dato
INSERT INTO productos (id, nombre)
VALUES (1, 'Teclado');Observa además que activo puede omitirse porque tiene DEFAULT 1. Eso no significa que DEFAULT convierta un NULL explícito en 1: son conceptos distintos. Si proporcionas NULL a una columna NOT NULL, la operación sigue siendo inválida.
¿Y si la columna debería ser opcional?
Entonces la pregunta cambia: quizá la restricción no representa correctamente el dominio. Antes de alterar la tabla, confirma si “desconocido” o “todavía no informado” es un estado válido para esa columna. Si lo es, documenta el cambio de modelo; si no, corrige el flujo que genera el dato ausente.
Método de diagnóstico
- Lee el nombre de la columna que señala el error.
- Revisa la lista de columnas del INSERT o el
SETdel UPDATE. - Distingue columna omitida de NULL explícito.
- Comprueba DEFAULT solo si la columna puede obtener un valor automático válido.
- Cambia el esquema únicamente si la obligatoriedad era incorrecta.
Error frecuente: pensar que DEFAULT sustituye cualquier NULL
Omitir una columna y asignarle NULL no es lo mismo
Un valor predeterminado puede aplicarse cuando la operación no proporciona un valor para esa columna. Un NULL explícito sigue siendo un valor nulo y viola NOT NULL.
Práctica correctiva
Corrige una fila incompleta
La tabla clientes tiene email TEXT NOT NULL. La aplicación intenta guardar email = NULL. ¿Qué comprobarías antes de quitar la restricción?
Solución razonada
Comprueba primero por qué la aplicación no obtuvo el correo. Si el dominio exige un correo, corrige la validación o el mapeo de datos y conserva NOT NULL. Solo vuelve opcional la columna si el modelo realmente admite ese estado.
Qué debes recordar
NOT NULLprotege la obligatoriedad de una columna.- Un
NULLexplícito no se arregla con un DEFAULT. - Distingue un dato ausente de una regla de modelo incorrecta.
- No quites la restricción sin entender por qué falta el valor.