Modificar datos · alcance y seguridad

DELETE vs TRUNCATE vs DROP

Tres sentencias pueden borrar datos, pero no conservan lo mismo ni aceptan las mismas condiciones.

Lectura: 5–7 minComparación paso a pasoIncluye práctica guiada
Contenido de esta guía

Respuesta rápida

DELETE elimina filas y puede usar WHERE. TRUNCATE TABLE vacía la tabla completa sin eliminar su definición. DROP TABLE elimina la tabla como objeto.

La elección empieza por lo que debe seguir existiendo después de la operación.

Qué conserva cada sentencia

Alcance básico de DELETE, TRUNCATE y DROP
Sentencia¿Admite filtro?¿Conserva la tabla?Uso habitual
DELETESí, con WHERESíEliminar filas concretas o todas las filas respetando la lógica de borrado del motor.
TRUNCATE TABLENoSíVaciar una tabla completa cuando el motor y las dependencias lo permiten.
DROP TABLENoNoRetirar la tabla, sus datos y objetos asociados a su definición.

Flujo seguro antes de borrar

  1. Escribe un SELECT con la misma condición y revisa las filas.
  2. Comprueba claves foráneas, vistas, procesos y permisos que dependen de la tabla.
  3. Decide si necesitas conservar la estructura, los datos no seleccionados y los identificadores.
  4. Usa una transacción cuando el motor y la sentencia concreta permitan revertirla.
  5. Verifica el resultado antes de confirmar y conserva un plan de recuperación independiente.
Flujo para DELETE
SELECT id, estado, total
FROM pedidos
WHERE estado = 'cancelado';

BEGIN;
DELETE FROM pedidos
WHERE estado = 'cancelado';

SELECT COUNT(*) AS cancelados_restantes
FROM pedidos
WHERE estado = 'cancelado';
ROLLBACK;

El ejemplo termina con ROLLBACK para practicar sin conservar el borrado. En producción, revisa la sintaxis transaccional y las restricciones del motor utilizado.

Diferencias que no debes generalizar

El comportamiento de TRUNCATE y de las sentencias de definición no es idéntico entre motores. Pueden cambiar la posibilidad de reversión, el tratamiento de columnas de identidad, la ejecución de desencadenadores, los permisos y el manejo de claves foráneas.

  • PostgreSQL: documenta TRUNCATE como una operación que elimina todas las filas sin escanearlas una a una y que puede participar en una transacción.
  • SQL Server: conserva la estructura, restablece normalmente el contador de identidad y permite revertir la operación dentro de una transacción, con limitaciones documentadas.
  • MySQL: trata TRUNCATE TABLE como una sentencia de definición de datos con reglas propias; no debe asumirse que se comporta como un DELETE transaccional.
  • SQLite: no ofrece una sentencia TRUNCATE TABLE; un DELETE sin filtro puede usar una optimización interna.

Errores frecuentes

Ejecutar DELETE sin revisar el filtro

La ausencia de WHERE elimina todas las filas. Convierte primero la condición en un SELECT y valida su cantidad y contenido.

Elegir TRUNCATE solo porque parece más rápido

Puede estar bloqueado por relaciones, exigir permisos diferentes o cambiar identidades. El rendimiento no sustituye la revisión de efectos.

Usar DROP cuando otra parte todavía necesita la tabla

Eliminar la definición rompe consultas, vistas y procesos dependientes. Retirar un objeto requiere una revisión de dependencias y un plan de despliegue.

Práctica de decisión

Inicial · seguridad

Elige la operación correcta

Debes resolver tres necesidades: borrar solo pedidos cancelados; vaciar una tabla temporal conservando su estructura; retirar definitivamente una tabla de pruebas que ya no tiene dependencias. Indica la sentencia adecuada y la comprobación previa.

Qué debes recordar

  • DELETE trabaja con filas y puede filtrar.
  • TRUNCATE vacía la tabla completa, cuando existe y se puede aplicar.
  • DROP elimina la definición de la tabla.
  • Transacciones, identidades, desencadenadores y dependencias cambian por motor.

Conceptos relacionados

Fuentes técnicas consultadas