Aprende SQL · lección gratuita

Lección 37 · Eliminar datos: DELETE

Resumen

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.

Sintaxis / Conceptos

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:

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

Ejemplos

-- 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; (sin WHERE) vacía la tabla y NO se puede deshacer fuera de una transacción. Antes de cualquier borrado, ejecuta el SELECT COUNT(*) con el mismo WHERE para saber exactamente cuántas filas se irán.

Cheatsheet

FormaQué 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 →

Ver todas las lecciones de Aprende SQL →