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

El comando TRUNCATE TABLE en SQL se utiliza para eliminar rápidamente todos los registros de una tabla, sin borrar la estructura de la tabla.
Después de ejecutar TRUNCATE, la tabla queda vacía pero sigue existiendo con sus columnas, índices y restricciones.

👉 Es más rápido que DELETE porque no elimina fila por fila, sino que libera el espacio de almacenamiento de manera más eficiente.

Sintaxis básica de TRUNCATE TABLE

TRUNCATE TABLE nombre_tabla;
  • nombre_tabla: la tabla que se vaciará.

Ejemplo básico de TRUNCATE TABLE

Tabla usuarios:

idnombreemail
1Anaana@mail.com
2Luisluis@mail.com
3Carlacarla@mail.com

Consulta:

TRUNCATE TABLE usuarios;

Resultado → la tabla queda vacía:

idnombreemail

👉 La estructura se mantiene, pero todas las filas desaparecen.

Diferencia entre TRUNCATE y DELETE

CaracterísticaTRUNCATE TABLEDELETE
VelocidadMuy rápido, libera espacio directoMás lento, elimina fila por fila
Registro en logsGeneralmente mínimoRegistra cada eliminación
WHERE disponible❌ No se puede usar✅ Sí, se pueden borrar filas específicas
Dispara triggers❌ En muchos motores no dispara✅ Sí dispara triggers
Restaura valores autoincrement✅ Reinicia contadores❌ Mantiene el valor actual
Transacciones✅ Puede deshacerse con ROLLBACK (si el motor lo soporta)✅ Se puede revertir con ROLLBACK

Ejemplo con DELETE:

DELETE FROM usuarios WHERE id = 1;

👉 Borra solo a Ana.

Ejemplo con TRUNCATE:

TRUNCATE TABLE usuarios;

👉 Borra todos los registros en un solo paso.

TRUNCATE con tablas relacionadas

Si existen claves foráneas (FOREIGN KEY), algunos motores de base de datos no permiten truncar la tabla directamente. Ver más sobre FOREIGN KEY y su impacto en restricciones.

Ejemplo:

TRUNCATE TABLE pedidos;
-- ❌ Error: la tabla tiene restricciones de clave foránea

👉 En estos casos, se debe:

  1. Eliminar la restricción,
  2. O truncar primero la tabla hija,
  3. O usar DELETE en su lugar.

Ejemplo práctico: reiniciar datos de pruebas

En un entorno de desarrollo o pruebas es común necesitar vaciar datos:

TRUNCATE TABLE logs;
TRUNCATE TABLE usuarios_test;

👉 Se limpian las tablas sin necesidad de borrarlas y recrearlas.

TRUNCATE y valores AUTO_INCREMENT

En motores como MySQL, al truncar una tabla el contador de la columna AUTO_INCREMENT se reinicia.

Ejemplo:

CREATE TABLE productos (
  id INT AUTO_INCREMENT PRIMARY KEY,
  nombre VARCHAR(50)
);

INSERT INTO productos (nombre) VALUES ('Laptop'), ('Mouse');
TRUNCATE TABLE productos;
INSERT INTO productos (nombre) VALUES ('Monitor');

👉 El id de Monitor será 1, no 3.

Errores comunes con TRUNCATE TABLE

  1. Intentar usar WHERE
TRUNCATE TABLE usuarios WHERE ciudad = 'Madrid'; -- ❌ Incorrecto

👉 No es posible, siempre borra todas las filas.

  1. Truncar una tabla con claves foráneas activas
    👉 Genera error en motores como SQL Server o PostgreSQL.
  2. Asumir que dispara triggers
    👉 Normalmente no lo hace (dependiendo del motor).
  3. Olvidar que reinicia AUTO_INCREMENT
    👉 Puede causar confusión en reportes que esperan continuidad en IDs.

Buenas prácticas con TRUNCATE

  • Usarlo solo cuando sea seguro eliminar todas las filas.
  • Evitarlo en tablas relacionadas por claves foráneas.
  • Recordar que reinicia contadores AUTO_INCREMENT.
  • Probar primero en entornos de desarrollo, no directamente en producción.
  • En producción, evaluar si es mejor DELETE o TRUNCATE, y considerar modificaciones con ALTER TABLE en caso de restricciones.

TRUNCATE en distintos motores de base de datos

  • MySQL / MariaDB → soporta TRUNCATE, reinicia AUTO_INCREMENT.
  • PostgreSQL → soporta TRUNCATE, puede hacerlo en cascada con TRUNCATE ... CASCADE.
  • SQL Server → soporta TRUNCATE, pero no en tablas con claves foráneas.
  • Oracle → soporta TRUNCATE, no genera logs fila por fila.
  • SQLite → no tiene TRUNCATE, se simula con DELETE FROM tabla.

TRUNCATE con CASCADE en PostgreSQL

TRUNCATE TABLE pedidos CASCADE;

👉 Vacía la tabla y también aquellas que dependen de ella mediante claves foráneas.

Casos de uso de TRUNCATE TABLE

  1. Vaciar logs o registros temporales.
  2. Reiniciar tablas de pruebas en desarrollo.
  3. Eliminar grandes volúmenes de datos rápidamente.
  4. Resetear datos de reportes periódicos.
  5. Preparar una base de datos antes de importar información nueva.

Preguntas frecuentes (FAQ)

1. ¿TRUNCATE borra la tabla o solo sus datos?
Solo borra los datos, la tabla sigue existiendo.

2. ¿Se puede usar TRUNCATE con WHERE?
No, siempre elimina todas las filas.

3. ¿TRUNCATE reinicia el AUTO_INCREMENT?
Sí, en la mayoría de motores como MySQL.

4. ¿Se puede revertir un TRUNCATE con ROLLBACK?
Depende del motor: en MySQL InnoDB sí, en otros casos puede no ser posible.

5. ¿Qué diferencia hay entre TRUNCATE y DROP TABLE?

  • TRUNCATE → elimina datos, conserva la tabla.
  • DROP TABLE → elimina la tabla y su definición.

Conclusión

El comando TRUNCATE TABLE en SQL es ideal para:

  • Eliminar todos los registros de una tabla de manera rápida.
  • Reiniciar contadores de autoincremento.
  • Liberar espacio de forma eficiente.

Sin embargo, debe usarse con cuidado, ya que no admite condiciones, puede estar limitado por claves foráneas y no siempre es reversible.

Dominar TRUNCATE y saber cuándo usarlo en lugar de DELETE o DROP TABLE es esencial para cualquier desarrollador o administrador de bases de datos.

Compara TRUNCATE vs DELETE en INSERT, UPDATE y DELETE y vuelve al Glosario SQL completo.

Scroll al inicio