Sentencia TRUNCATE TABLE en SQL

TRUNCATE TABLE es la sentencia SQL para eliminar todos los registros/filas de una tabla sin afectar al esquema y estructura de la misma. A diferencia de la sentencia DELETE FROM, TRUNCATE TABLE no admite cláusula WHERE, por lo que no se podrán eliminar registros específicos. Sin embargo y en contraposición, TRUNCATE TABLE no necesita escanear todas las filas antes de eliminarlas, por lo que la ejecución será más rápida y eficiente en el caso que queramos eliminar todos los registros de una tabla manteniendo su estructura.

En este punto, es donde radica su diferencia principal con la sentencia DROP TABLE, ya que esta, elimina tanto los registros como la estructura y definición de la tabla en sí, mientras que TRUNCATE TABLE elimina únicamente los registros, pero mantiene intacta la estructura y definición de la tabla.

TRUNCATE TABLE reseteará los contadores auto incrementales nuevamente al valor por defecto especificado en la sentencia CREATE TABLE.

La sentencia SQL es muy simple: TRUNCATE TABLE nombreTabla pudiendo añadir como prefijo, la base de datos y/o esquema al que pertenece la tabla.

TRUNCATE TABLE tienda.dbo.Pedidos;

TRUNCATE TABLE no admitirá en la definición de su sentencia el argumento IF EXISTS. Sin embargo, cuando tenemos tablas particionadas, admitirá el argumento WITH PARTITIONS donde se especificará que partición en concreto truncar. Atendiendo a este argumento, deberemos tener en cuenta las siguientes consideraciones:

  • Cuando nuestra tabla no está particionada e intentamos utilizar el argumento WITH PARTITIONS, la sentencia TRUNCATE TABLE nos dará un error como en el ejemplo que vemos a continuación.
TRUNCATE TABLE tienda.dbo.Pedidos WITH (PARTITIONS (1));

No se puede especificar un número de partición en la instrucción truncar tabla porque el elemento tabla ‘tienda.dbo.Pedidos’ no está particionado.

  • En el caso y supuesto que nuestra tabla estuviera particionada podríamos utilizar el argumento WITH PARTITIONS de las siguientes maneras:
  1. Si queremos eliminar una única partición en específico, podemos concretarla en la definición:
TRUNCATE TABLE nombreTabla WITH (PARTITIONS (2));
  1. Si queremos eliminar más de una partición, podremos especificarlas desde una única sentencia:
TRUNCATE TABLE nombreTabla WITH (PARTITIONS (1,5));
  1. También podremos definir un rango para eliminar varias particiones:
TRUNCATE TABLE nombreTabla WITH (PARTITIONS (2 TO 5));
  1. También es posible especificar varias particiones y un rango desde la misma sentencia:
TRUNCATE TABLE nombreTabla WITH (PARTITIONS (2,3,5 TO 7));

TRUNCATE TABLE tiene algunas limitaciones que habrá que tener en cuenta y consideración. Ente ellas la más importante y destacada es que no se podrá utilizar dicha sentencia sobre tablas referenciadas por una restricción Foreign Key a otra tabla. Para ejemplificar este caso, supongamos que quisiéramos truncar la tabla Clientes cuyo campo idClientes, está definido como una clave Foreign Key en la tabla Pedidos.

TRUNCATE TABLE Clientes;

No se puede truncar la tabla ‘Clientes’. Una restricción FOREIGN KEY hace referencia a ella.

En conclusión, TRUNCATE TABLE es una óptima opción cuando queremos resetear todos los datos de una tabla pero sin eliminarla del sistema, debiendola tener en cuenta y priorizarla sobre la alternativa DELETE FROM, ya que ahorraremos en recursos y agilizaremos la ejecución.