Aprende SQL · lección gratuita
DELETE borra filas completas de una tabla según una condición WHERE. Como en UPDATE, omitir el WHERE vacía la tabla entera. DELETE quita filas, no columnas ni la tabla en sí (para eso están ALTER y DROP). Trabajamos sobre clones temporales para no tocar la semilla.
DELETE FROM tabla WHERE condición;. Borra cada fila que cumple el filtro.WHERE: DELETE FROM tabla; borra todas las filas (la tabla queda vacía pero sigue existiendo).WHERE con subconsulta: puedes borrar según otra tabla, p. ej. DELETE FROM t WHERE id IN (SELECT ... ) o WHERE NOT EXISTS (...).INTEGER PRIMARY KEY ya usados no se reciclan automáticamente.DELETE vs DROP vs TRUNCATE: DELETE quita filas (con WHERE opcional); DROP TABLE elimina la tabla entera; SQLite no tiene TRUNCATE (un DELETE sin WHERE cumple ese rol).DELETE evalúa el WHERE fila por fila y elimina las que dan verdadero. Es irreversible salvo que estés dentro de una transacción con ROLLBACK (lección de transacciones). Por eso aplica la misma disciplina que con UPDATE: comprueba el WHERE con un SELECT antes.
Patrones útiles:
NOT IN.DELETE FROM t WHERE estado <> 'Completado'.ON DELETE, borrar el padre puede propagarse (CASCADE) o fallar (RESTRICT). En SQLite las FK deben estar activadas con PRAGMA foreign_keys = ON.Cuidado: DELETE FROM t WHERE col IN (SELECT col FROM t WHERE ...) puede comportarse distinto según el motor; en SQLite la subconsulta se materializa, así que es seguro.
SELECT id, cliente_id, fecha, estado FROM pedidos ORDER BY fecha DESC LIMIT 6
-- Clon de trabajo idempotente con datos reales
DROP TABLE IF EXISTS ped_limpieza;
CREATE TABLE ped_limpieza AS SELECT * FROM pedidos;
-- DELETE con WHERE simple: quitar los cancelados
DELETE FROM ped_limpieza WHERE estado = 'Cancelado';
-- DELETE con subconsulta: quitar pedidos de clientes SMB
DELETE FROM ped_limpieza
WHERE cliente_id IN (SELECT id FROM clientes WHERE segmento = 'SMB');
-- Resultado: cuántos pedidos quedan por estado
SELECT estado, COUNT(*) AS n FROM ped_limpieza GROUP BY estado ORDER BY estado;
💡DELETE FROM t;(sinWHERE) vacía la tabla y NO se puede deshacer fuera de una transacción. Antes de cualquier borrado, ejecuta elSELECT COUNT(*)con el mismoWHEREpara saber exactamente cuántas filas se irán.
| Forma | Qué hace |
|---|---|
DELETE FROM t WHERE id = 5; | Borra las filas que cumplen el filtro |
DELETE FROM t WHERE col IN (SELECT ...); | Borra según otra consulta |
DELETE FROM t WHERE NOT EXISTS (...); | Borra huérfanos / sin coincidencia |
DELETE FROM t; | ⚠️ Borra TODAS las filas (tabla vacía) |
DROP TABLE t; | Elimina la tabla entera (no solo filas) |
---
← Actualizar datos: UPDATECrear tablas y restricciones: CREATE TABLE →