Error SQL · INSERT y forma de la fila

INSERT: el número de columnas y valores no coincide

Un INSERT debe poder emparejar cada valor con una columna de destino. Si las cantidades no coinciden, corrige la forma de la fila antes de revisar tipos, restricciones o datos.

Lectura: 12–16 minEjemplo reproduciblePráctica con pistas

El síntoma: la lista de columnas y VALUES tienen tamaños diferentes

Cuando escribes una lista explícita de columnas en INSERT, cada fila de VALUES debe aportar el mismo número de expresiones. SQLite lo documenta de forma directa, y PostgreSQL define igualmente la correspondencia entre la lista de columnas de destino y los valores de cada fila.

Este error aparece antes de comprobar muchas otras reglas: el motor ni siquiera puede decidir qué valor pertenece a qué columna.

Ejemplo reproducible: tres columnas y solo dos valores

SQL problemático
CREATE TABLE productos (
  id INTEGER PRIMARY KEY,
  nombre TEXT NOT NULL,
  precio NUMERIC DEFAULT 0
);

INSERT INTO productos (id, nombre, precio)
VALUES (1, 'Teclado');

La lista de destino contiene id, nombre y precio, pero VALUES aporta dos expresiones. No hay una correspondencia uno a uno.

Corrección 1: omite de la lista la columna que debe usar DEFAULT

SQL corregido
INSERT INTO productos (id, nombre)
VALUES (1, 'Teclado');
Resultado: precio toma su valor predeterminado
idnombreprecio
1Teclado0

Corrección 2: proporciona todos los valores declarados

INSERT completo
INSERT INTO productos (id, nombre, precio)
VALUES (2, 'Ratón', 24.90);

Ambas formas son válidas porque cada expresión de VALUES tiene una columna de destino inequívoca.

Por qué conviene escribir la lista de columnas

Un INSERT sin lista de columnas depende más de la estructura física y del orden definido en la tabla. Escribir INSERT INTO productos (id, nombre, precio) deja visible la intención y permite omitir columnas que deben obtener un valor predeterminado o NULL cuando el esquema lo permite.

Diagnostica por capas: primero comprueba la cantidad y el orden de columnas; después revisa tipos, NOT NULL, UNIQUE, FOREIGN KEY y demás restricciones.

Método de diagnóstico

  1. Cuenta las columnas de destino.
  2. Cuenta las expresiones de cada fila de VALUES.
  3. Comprueba qué columnas pueden omitirse porque tienen DEFAULT, aceptan NULL o son generadas por el motor.
  4. Revisa el orden para evitar insertar un valor válido en la columna equivocada.
  5. Solo después diagnostica tipos y restricciones.

Error frecuente: añadir NULL solo para igualar la cantidad

La forma puede quedar correcta y el dato seguir siendo incorrecto

Añadir NULL como relleno no es una solución general: la columna puede ser NOT NULL, tener un DEFAULT mejor o requerir un valor real. Ajusta la lista de columnas a la intención del alta.

Práctica correctiva

Básica · INSERT

Inserta un producto dejando que el precio use DEFAULT

La tabla tiene id, nombre y precio DEFAULT 0. Inserta el producto 3, “Cable”, sin escribir un precio.

Qué debes recordar

  • Cada fila de VALUES debe corresponder con la lista de columnas de destino.
  • Usar columnas explícitas hace el INSERT más legible y resistente a cambios.
  • Omitir una columna no equivale a escribir NULL: pueden intervenir DEFAULT y reglas del esquema.
  • Comprueba primero la forma del INSERT y después tipos y restricciones.

Si columnas y valores sí coinciden pero el INSERT sigue fallando, comprueba si algún texto excede el límite de su VARCHAR: cómo diagnosticar un valor demasiado largo para VARCHAR.

Conceptos relacionados

Fuentes técnicas consultadas