TRUNCATE
no genera ningún dato de reversión, lo que lo hace ultrarrápido. Simplemente desasigna las páginas de datos utilizadas por la tabla.
Sin embargo, si está en una transacción y desea tener la capacidad de "deshacer" esta eliminación, debe usar DELETE FROM
, que ofrece la posibilidad de retroceder.
EDITAR: Tenga en cuenta que lo anterior es incorrecto para SQL Server (pero se aplica a Oracle). En SQL Server, es posible revertir una operación truncada si está dentro de una transacción y la transacción no se ha confirmado. Desde la perspectiva de SQL Server, una diferencia clave entre DELETE FROM y TRUNCATE es this :"La declaración DELETE elimina las filas de una en una y registra una entrada en el registro de transacciones para cada fila eliminada. TRUNCATE TABLE elimina los datos desasignando las páginas de datos utilizadas para almacenar los datos de la tabla y registra solo las desasignaciones de páginas en el registro de transacciones ."
En otras palabras, hay menos registro durante TRUNCATE porque solo las desasignaciones de página se registran en el registro de transacciones, mientras que con DELETE FROM se registra la eliminación de cada fila. Esa es una de las razones por las que TRUNCATE es tan rápido como un rayo.
Tenga en cuenta también desde ese enlace de MSDN que no puede truncar tablas a las que se hace referencia mediante restricciones de clave externa, participar en una vista indexada o publicarse mediante replicación transaccional o replicación de combinación.
EDICIÓN 2: Otro punto clave es que TRUNCATE TABLE restablecerá su identidad a la semilla inicial, mientras que DELETE FROM continuará incrementándose desde donde se quedó. Referencia:la respuesta de Ben Robinson.