Diferencia entre Truncate table y Delete from
«Para los que desconocen el funcionamiento de Truncate Table, es parecido a ejecutar una declaración Delete sin la claúsula Where»
Quizás para algunos desarrolladores existe la duda, que es mejor Delete o Truncate , la respuesta es depende de la finalidad de nuestro desarrollo, podría decirles que la mas importante seria, truncate no deja rastros en el log, a diferencia que el delete genera registro de transacciones, si quisiéramos revertir datos borrados el delete sera el mejor
Sin embargo existe una extensa lista de diferencias, nada mejor que mirarlas a detalle
Diferencia entre truncate y delete
TRUNCATE TABLE |
DELETE FROM
|
|
|
- No permite el borrado selectivo. TRUNCATE TABLE elimina todo el contenido de la tabla.
|
- Permite el borrado selectivo, mediante la clausula WHERE.
|
- No se puede ejecutar, si la tabla tiene asociadas, aun si no existiesen registros en la tabla que contiene la FK.
|
- Se puede ejecutar si hay FK asociadas a la tabla, pero siempre y cuando no tenga registros asociados o la FK este deshabilitada.
|
- Es la forma más rápida de eliminar el contenido de una tabla.
|
|
- No se activa ningún trigger al ejecutarse (a partir de SQL Server 2005, es posible capturar el evento mediante un DDL trigger, pero a modo de auditoría, no es posible tener acceso a los valores que fueron eliminados).
|
- Puede activarse el trigger de ON DELETE y poder determinar que registros están siendo eliminados. siendo eliminados.
|
- En caso que la tabla tuviese un campo Identity, se resetea el valor a 1 (o al valor base determinado en el campo).
|
- No resetea el valor del campo Identity, en caso que la tabla tuviese uno.
|
- TRUNCATE TABLE desasocia (deallocate) las páginas de datos de la tabla.
|
- DELETE FROM marca cada registro afectado, como eliminado.
|
- El logueo en el transaction log es mínimo. Solo registra el dealloc de las páginas de datos.
|
- Loguea cada operación sobre los registros afectados.
|
- No puede ser ejecutado si la tabla tiene asociadas vistas indexadas.
|
- Se puede ejecutar si la tabla tiene vistas indexadas.
|
Tabla cortesia de grimpidev

Truncate elimina los datos por páginas, en cambio un delete lo hace registro por registro
por ende tener cuidado ya que no pasa por el log de transaciones de nuestra base de datos, lo que significa que si haces truncate olvidate de recuperar los datos ?