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
| Sentencia | ¿Admite filtro? | ¿Conserva la tabla? | Uso habitual |
|---|---|---|---|
DELETE | Sí, con WHERE | Sí | Eliminar filas concretas o todas las filas respetando la lógica de borrado del motor. |
TRUNCATE TABLE | No | Sí | Vaciar una tabla completa cuando el motor y las dependencias lo permiten. |
DROP TABLE | No | No | Retirar la tabla, sus datos y objetos asociados a su definición. |
Flujo seguro antes de borrar
- Escribe un
SELECTcon la misma condición y revisa las filas. - Comprueba claves foráneas, vistas, procesos y permisos que dependen de la tabla.
- Decide si necesitas conservar la estructura, los datos no seleccionados y los identificadores.
- Usa una transacción cuando el motor y la sentencia concreta permitan revertirla.
- Verifica el resultado antes de confirmar y conserva un plan de recuperación independiente.
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
TRUNCATEcomo 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 TABLEcomo una sentencia de definición de datos con reglas propias; no debe asumirse que se comporta como unDELETEtransaccional. - SQLite: no ofrece una sentencia
TRUNCATE TABLE; unDELETEsin 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
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.
WHERE.Solución razonada
- Pedidos cancelados:
DELETE FROM pedidos WHERE estado = 'cancelado', después de ejecutar elSELECTequivalente. - Tabla temporal:
TRUNCATE TABLEsi el motor lo admite y sus restricciones, identidades y transacciones encajan; en SQLite se utilizaDELETE. - Tabla retirada:
DROP TABLE, después de verificar dependencias, permisos y recuperación.
Qué debes recordar
DELETEtrabaja con filas y puede filtrar.TRUNCATEvacía la tabla completa, cuando existe y se puede aplicar.DROPelimina la definición de la tabla.- Transacciones, identidades, desencadenadores y dependencias cambian por motor.