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:
| id | nombre | |
|---|---|---|
| 1 | Ana | ana@mail.com |
| 2 | Luis | luis@mail.com |
| 3 | Carla | carla@mail.com |
Consulta:
TRUNCATE TABLE usuarios;
Resultado → la tabla queda vacía:
| id | nombre | |
|---|---|---|
👉 La estructura se mantiene, pero todas las filas desaparecen.
Diferencia entre TRUNCATE y DELETE
| Característica | TRUNCATE TABLE | DELETE |
|---|---|---|
| Velocidad | Muy rápido, libera espacio directo | Más lento, elimina fila por fila |
| Registro en logs | Generalmente mínimo | Registra 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:
- Eliminar la restricción,
- O truncar primero la tabla hija,
- O usar
DELETEen 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
- Intentar usar WHERE
TRUNCATE TABLE usuarios WHERE ciudad = 'Madrid'; -- ❌ Incorrecto
👉 No es posible, siempre borra todas las filas.
- Truncar una tabla con claves foráneas activas
👉 Genera error en motores como SQL Server o PostgreSQL. - Asumir que dispara triggers
👉 Normalmente no lo hace (dependiendo del motor). - 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, reiniciaAUTO_INCREMENT. - PostgreSQL → soporta
TRUNCATE, puede hacerlo en cascada conTRUNCATE ... 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
- Vaciar logs o registros temporales.
- Reiniciar tablas de pruebas en desarrollo.
- Eliminar grandes volúmenes de datos rápidamente.
- Resetear datos de reportes periódicos.
- 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.