INSERT INTO en SQL: qué es, cómo funciona y ejemplos prácticos

El comando INSERT INTO en SQL se utiliza para agregar nuevas filas a una tabla.
Es uno de los comandos fundamentales del lenguaje SQL, ya que permite alimentar una base de datos con información.

Con INSERT INTO podemos:

  • Insertar valores en todas las columnas de la tabla.
  • Insertar valores solo en columnas específicas.
  • Insertar varias filas en una sola instrucción.
  • Insertar datos a partir de otra consulta (INSERT ... SELECT).

Sintaxis básica de INSERT INTO

Existen dos formas principales:

1) Insertar en todas las columnas

INSERT INTO nombre_tabla
VALUES (valor1, valor2, valor3, ...);

👉 El orden de los valores debe coincidir exactamente con el orden de las columnas de la tabla.

2) Insertar en columnas específicas

INSERT INTO nombre_tabla (columna1, columna2, columna3)
VALUES (valor1, valor2, valor3);

👉 Esta es la forma más recomendada, porque hace explícitas las columnas que reciben valores.

Ejemplos básicos de INSERT INTO

1) Insertar un cliente

INSERT INTO clientes (id, nombre, ciudad)
VALUES (1, 'Ana', 'Madrid');

2) Insertar valores en todas las columnas

Si la tabla productos tiene 3 columnas (id, nombre, precio):

INSERT INTO productos
VALUES (101, 'Teclado', 25.5);

3) Insertar múltiples filas

En muchos motores (MySQL, PostgreSQL, SQL Server) se pueden insertar varias filas a la vez:

INSERT INTO empleados (id, nombre, salario)
VALUES 
  (1, 'Luis', 2000),
  (2, 'Carla', 2500),
  (3, 'Mario', 2200);

👉 Es más eficiente que ejecutar múltiples INSERT.

4) Insertar con valores por defecto

Si una columna tiene un DEFAULT, podemos omitirla:

CREATE TABLE cuentas (
  id INT PRIMARY KEY,
  activa BOOLEAN DEFAULT TRUE
);

INSERT INTO cuentas (id) VALUES (1);

👉 El valor de activa será TRUE automáticamente.

5) Insertar a partir de otra consulta

INSERT INTO clientes_archivados (id, nombre, ciudad)
SELECT id, nombre, ciudad
FROM clientes
WHERE ciudad = 'Sevilla';

👉 Copia clientes de una tabla a otra usando SELECT y WHERE.

INSERT INTO y tipos de datos

Es importante que los valores insertados coincidan con el tipo de dato de cada columna:

  • Cadenas → 'texto' con comillas simples.
  • Números → sin comillas.
  • Fechas → formato 'YYYY-MM-DD'.
  • Valores nulos → NULL.

Ejemplo:

INSERT INTO pedidos (id, cliente_id, fecha, total)
VALUES (10, 2, '2025-03-01', NULL);

👉 total queda nulo hasta calcularlo.

INSERT INTO y AUTO_INCREMENT

En muchas bases de datos, una columna id se define como autoincremental:

CREATE TABLE clientes (
  id INT AUTO_INCREMENT PRIMARY KEY,
  nombre VARCHAR(100)
);

En este caso, no es necesario (ni correcto) especificar el id:

INSERT INTO clientes (nombre) VALUES ('Sofía');

👉 El motor asigna automáticamente el valor del id.

INSERT INTO con funciones

Podemos insertar valores generados con funciones:

INSERT INTO registros (fecha, descripcion)
VALUES (NOW(), 'Usuario logueado');

👉 NOW() inserta la fecha y hora actual.

Errores comunes con INSERT INTO

  1. Número incorrecto de columnas y valores
-- ❌ Error: 3 columnas, 2 valores
INSERT INTO empleados (id, nombre, salario)
VALUES (1, 'Laura');
  1. Tipos de datos incompatibles
-- ❌ Error: salario es numérico
INSERT INTO empleados (id, nombre, salario)
VALUES (2, 'Pablo', 'mil euros');
  1. Violación de restricción UNIQUE
-- ❌ Error: email duplicado si ya existe
INSERT INTO usuarios (id, email) VALUES (1, 'ana@email.com');
  1. Omisión de NOT NULL
    Si una columna está definida como NOT NULL y no tiene DEFAULT, debe recibir un valor.

Buenas prácticas con INSERT INTO

  • Especificar siempre las columnas: hace el código más legible y evita errores si la tabla cambia.
  • Insertar varias filas en un solo comando: mejora la eficiencia en cargas masivas.
  • Validar datos antes de insertarlos: usar restricciones (CHECK, NOT NULL, UNIQUE).
  • Usar transacciones en inserciones masivas para mantener consistencia.
  • Evitar hardcodear IDs autoincrementales: dejar que la base los genere.

INSERT INTO y rendimiento

En sistemas con millones de filas:

  • Es mejor insertar en bloques (batch insert) que fila por fila.
  • Usar herramientas de carga masiva (COPY en PostgreSQL, LOAD DATA INFILE en MySQL).
  • Mantener índices adecuados: demasiados índices ralentizan las inserciones.

Ejemplo avanzado: cargar ventas diarias

INSERT INTO ventas_resumen (fecha, total_dia)
SELECT fecha, SUM(total)
FROM ventas
GROUP BY fecha;

👉 Genera una tabla resumen con las ventas diarias.

Preguntas frecuentes (FAQ)

1. ¿INSERT INTO y INSERT son lo mismo?
Sí. La mayoría de los motores aceptan ambas formas. INSERT INTO es la forma más explícita.

2. ¿Puedo insertar múltiples filas con un solo comando?
Sí, separándolas con comas. Ejemplo:

INSERT INTO tabla (col1, col2) VALUES (1,'A'), (2,'B');

3. ¿Qué diferencia hay entre INSERT y UPDATE?

  • INSERT agrega nuevas filas.
  • UPDATE modifica filas existentes.

4. ¿Qué pasa si intento insertar una fila duplicada en una columna UNIQUE?
La base de datos lanza un error. En algunos motores se puede usar INSERT IGNORE o ON CONFLICT DO NOTHING.

5. ¿Cómo inserto valores por defecto?
Podés omitir la columna o usar la palabra clave DEFAULT.

Conclusión

El comando INSERT INTO es la herramienta fundamental para cargar datos en una base de datos SQL.
Con él podemos insertar filas simples, múltiples registros, valores por defecto y resultados de otras consultas.

Dominar INSERT INTO es esencial para cualquier programador, analista de datos o administrador de bases de datos.

Practica inserciones con ejemplos en INSERT, UPDATE y DELETE y vuelve al Glosario SQL completo.

Scroll al inicio