En este post vamos a ver el uso del cláusula truncate en sql. Este comando sirve para eliminar datos de una tabla, dejándola tal y como estaba antes de la ejecución del comando. Es importante destacar que truncate es equivalente a delete sin clausula where. Sin embargo, truncate tiene una característica adicional: libera espacio en disco inmediatamente después de su ejecución. Por esta razón, es preferible utilizar truncate cuando se quiere eliminar todos los datos de una tabla.
Sintaxis del comando truncate en sql

TRUNCATE TABLE nombre_tabla;
Donde nombre_tabla es el nombre de la tabla que queremos modificar.
La diferencia del comando delete de sql el truncate no requiere de una clausula where para especificar que registros queremos eliminar, sino que directamente elimina todos los datos de la tabla.
Cuando debo utilizar delete en vez del truncate
Elegir cuando usar un comado o el otro dependera de lo que de la necesidad que tengas por lo cual te dejo algunos puntos que deberias tomar en cuenta antes de usar «TRUNCATE«.
A continuación, te presento algunas situaciones:
- Cuando necesitas eliminar solo una parte de los datos de una tabla: Si necesitas eliminar solo una parte de los datos de una tabla, la sentencia «DELETE» es más apropiada. Puedes utilizar la cláusula «WHERE» para especificar la condición que deben cumplir los registros que deseas eliminar.
- Cuando necesitas mantener un registro de los datos eliminados: Si necesitas mantener un registro de los datos eliminados, debes utilizar la sentencia «DELETE», ya que esta opción registra los cambios en el registro de transacciones y puedes recuperar los datos eliminados si es necesario.
- Cuando tienes restricciones de clave externa en tu tabla: Si tienes restricciones de clave externa en tu tabla, es posible que debas utilizar la sentencia «DELETE» en lugar de «TRUNCATE», ya que TRUNCATE no puede eliminar registros en tablas que tengan una restricción de clave externa que las referencie.
- Cuando necesitas una operación más de filas: Si necesitas una operación que permita eliminar filas o registros para controlar el proceso de eliminación de registros, la sentencia «DELETE» es más apropiada. Con la cláusula «DELETE» puedes controlar el proceso de eliminación de registros de forma más precisa y flexible que con «TRUNCATE».
La elección entre «DELETE» y «TRUNCATE» depende de las necesidades específicas de cada situación. Si necesitas eliminar todos los datos de una tabla de forma rápida y sin preocuparte por recuperarlos en el futuro, la sentencia «TRUNCATE», si necesitamos eliminar registros concretos tendremos que recurrir al comando delete.
Cómo desactivar TRUNCATE en SQL ?

Para evitar que se ejecute la sentencia «TRUNCATE» en una tabla específica, puedes crear un desencadenador (trigger) que detecte cuando se intenta ejecutar esta sentencia y la cancele automáticamente. Ademas puedes restringir los accesos de los usuarios asignando permisos especificos.
Ejemplo de TRUNCATE
Este código para crear un trigger en SQL Server que proteje de una ejecución de la sentencia «TRUNCATE» en una tabla llamada «mi_tabla».
CREATE TRIGGER evitar_truncate ON mi_tabla INSTEAD OF TRUNCATE AS BEGIN RAISERROR ('La sentencia TRUNCATE está desactivada en esta tabla', 16, 1) END;
Este desencadenador se activará en lugar de la ejecución de la sentencia «TRUNCATE» en la tabla «mi_tabla». El código del desencadenador simplemente generará un mensaje de error y cancelará la operación de la sentencia «TRUNCATE».
Si necesitas desactivar el desencadenador en algún momento, puedes utilizar el siguiente comando:
DROP TRIGGER evitar_truncate ON mi_tabla;
Es importante tener en cuenta que este ejemplo está basado en SQL Server y que la sintaxis puede variar ligeramente dependiendo del sistema de gestión de bases de datos que estés utilizando.
Además, asegúrate de evaluar cuidadosamente las implicaciones de desactivar la sentencia «TRUNCATE» antes de implementar un desencadenador de este tipo.
Que pasa si tienes llaves primarias y el Truncate?
Pues truncate reseteará la clave primaria a 0 en el caso de que la clave sea un identity , por lo que si después de ejecutar el comando insertas un nuevo registro, este tendrá un id=0. En cambio, delete no hace esto para el caso del delete la claver primaria no comienza en CERO .
Por que el truncate libera espacio inmediatamente ?
Pues porque elimina los datos de forma directa , mientras que el delete marca los registros como borrados pero no los elimina hasta que no se haya hecho un COMMIT o un ROLLBACK.
Conclusion
En resumen podemos decir que truncate es un comando DDL mientras que delete forma parte del lenguaje DML, y aunque ambos sirven para eliminar datos de una tabla, existen diferencias significativas entre ellos.
Espero que este post te haya sido útil!