Error SQL · validación

CHECK constraint falla: identifica qué regla del dato no se cumple

Una restricción CHECK rechaza una fila cuando la condición declarada no se cumple. La solución correcta es evaluar la regla con el dato concreto y decidir si el valor es inválido o si la regla fue modelada de forma incorrecta.

Lectura: 14–18 minEjemplo reproduciblePráctica con pistas

El síntoma: un valor queda fuera de la regla declarada

Las restricciones CHECK permiten expresar condiciones que cada fila debe respetar. PostgreSQL documenta que la restricción se considera satisfecha cuando la expresión resulta verdadera o nula; SQLite también evalúa la expresión de CHECK al insertar o actualizar la fila.

Por eso el diagnóstico debe separar dos preguntas: ¿el dato viola realmente la regla? y ¿la expresión representa correctamente el dominio?

Ejemplo reproducible: descuento fuera de rango

Esquema y operación problemática
CREATE TABLE cupones (
  codigo TEXT PRIMARY KEY,
  descuento INTEGER NOT NULL
    CHECK (descuento BETWEEN 1 AND 100)
);

INSERT INTO cupones (codigo, descuento)
VALUES ('VERANO', 130);

El valor 130 queda fuera del rango permitido. Si el dominio define el descuento como porcentaje entre 1 y 100, la restricción está detectando un dato inválido.

Prueba la condición con el valor real

Dato válido
INSERT INTO cupones (codigo, descuento)
VALUES ('VERANO', 30);

Si 130 debía ser válido por una regla de negocio diferente, modifica el modelo de forma deliberada y documentada. No cambies CHECK solo para aceptar una fila concreta sin comprender su significado.

CHECK no sustituye a NOT NULL

En PostgreSQL, una expresión CHECK que produce NULL no se considera una violación. SQLite también acepta una fila cuando la expresión de la restricción resulta nula. Si una columna además debe ser obligatoria, declara NOT NULL explícitamente.

Método de diagnóstico

  1. Localiza la restricción y copia su expresión.
  2. Sustituye mentalmente las columnas por los valores de la fila rechazada.
  3. Comprueba rango, signo, unidades y NULL.
  4. Corrige el dato si la regla representa el dominio.
  5. Revisa la restricción solo si la regla de negocio cambió o estaba mal expresada.

Error frecuente: ampliar la regla hasta que pase el dato

Una restricción demasiado permisiva deja de protegerte

Si cambias un rango válido solo porque apareció una fila fuera de él, puedes convertir un error de entrada en datos incorrectos persistentes.

Práctica correctiva

Básica · restricciones

Diagnostica una cantidad negativa

La tabla lineas_pedido exige CHECK (cantidad > 0) y una fila llega con cantidad = -2. Decide qué debes corregir.

Qué debes recordar

  • CHECK expresa una condición que debe cumplir cada fila.
  • Evalúa la regla con los valores concretos que fueron rechazados.
  • Combina CHECK con NOT NULL cuando la columna también sea obligatoria.
  • No amplíes la condición solo para hacer pasar un dato dudoso.

Conceptos relacionados

Fuentes técnicas consultadas