Modificar datos · bajas

DELETE

DELETE elimina filas; un proceso seguro comprueba el mismo filtro antes y después del cambio.

Lectura: 6–8 minEjemplo comprobadoPráctica con pistas
Contenido de esta guía

Qué hace DELETE

DELETE elimina filas de una tabla y conserva su estructura. WHERE define el alcance; sin esa cláusula, todas las filas son candidatas.

Antes de borrar, comprueba la selección con SELECT, revisa relaciones y ejecuta la operación dentro de una transacción cuando el motor y el entorno lo permitan.

Sintaxis y flujo seguro

Estructura
DELETE FROM tabla
WHERE condicion;
  1. Escribe un SELECT con la misma condición.
  2. Comprueba cantidad e identidad de las filas.
  3. Inicia una transacción de prueba.
  4. Ejecuta DELETE y vuelve a comprobar.
  5. Usa COMMIT o ROLLBACK de forma consciente.

Ejemplo guiado: cliente inactivo sin pedidos

Primero buscamos una fila que cumpla dos reglas: estar inactiva y no tener pedidos relacionados.

Comprobación previa
SELECT id, nombre, activo
FROM clientes
WHERE activo = 0
  AND NOT EXISTS (
    SELECT 1
    FROM pedidos
    WHERE pedidos.cliente_id = clientes.id
  );
Candidata comprobada antes de borrar
idnombreactivo
6Pablo Sanz0

En una copia de práctica, el borrado reversible sería:

Transacción de práctica
BEGIN;

DELETE FROM clientes
WHERE activo = 0
  AND NOT EXISTS (
    SELECT 1
    FROM pedidos
    WHERE pedidos.cliente_id = clientes.id
  );

SELECT COUNT(*) AS sigue_existiendo
FROM clientes
WHERE id = 6;

ROLLBACK;

La comprobación devuelve 0 dentro de la transacción y la fila reaparece después de ROLLBACK.

Qué ocurre con las relaciones

Una clave foránea puede impedir el borrado o aplicar una acción configurada, como borrar filas dependientes o establecer la referencia a NULL. No asumas el comportamiento: revisa la definición de la restricción antes de eliminar una fila principal.

Error frecuente

Ejecutar el DELETE antes de medir el alcance

Peligro
DELETE FROM pedidos;

La sentencia elimina todas las filas. Aunque ese sea el objetivo, confirma antes el conteo, las dependencias, la copia de seguridad y el comportamiento transaccional del motor.

Comprueba lo aprendido

Intermedia · borrado protegido

Selecciona clientes sin email ni pedidos

En el laboratorio SQLite o en una copia desechable, elimina clientes cuyo email sea NULL y que no tengan pedidos. Ejecuta primero el SELECT equivalente y termina con ROLLBACK para que la práctica no conserve el borrado. La base actual contiene dos candidatas.

Compatibilidad entre motores

DELETE FROM ... WHERE ... es común. Las cláusulas para limitar filas, unir otras tablas o devolver lo borrado cambian entre motores. SQLite puede optimizar internamente un borrado total sin filtros; esa optimización no reduce la necesidad de confirmar el alcance.

Qué debes recordar

  • DELETE elimina filas, no la tabla.
  • Sin WHERE, todas las filas son candidatas.
  • Comprueba el filtro con SELECT.
  • Las claves foráneas pueden bloquear o propagar el borrado.

Conceptos relacionados

Fuentes técnicas consultadas