🙏 Realmente necesitamos su apoyo. Necesitamos financiamiento para continuar nuestra misión: publicar nuevas lecciones y mejorar la plataforma. Si puede, por favor apoye el proyecto con una donación. Ayude al proyecto ahora →
Código SQL copiado al portapapeles

Lección 8.3: La sentencia DELETE

En la lección anterior, aprendimos cómo modificar registros utilizando UPDATE. Ahora veamos cómo eliminar filas innecesarias o desactualizadas con la sentencia DELETE. Este es un comando DML importante que debe usarse con especial cuidado, ya que los datos eliminados no siempre pueden recuperarse fácilmente.

Sintaxis básica

DELETE FROM table_name
WHERE condition;
  • DELETE FROM table_name — especifica la tabla de la cual se eliminarán las filas.
  • WHERE condition — determina qué filas serán eliminadas.

Si se omite WHERE, todas las filas en la tabla serán eliminadas.


Reglas importantes

  • Siempre verifica la cláusula WHERE: un error en la condición puede eliminar los datos incorrectos o demasiadas filas.
  • Ejecuta SELECT primero: antes de usar DELETE, es una buena práctica ejecutar SELECT con la misma condición y asegurarte de que el resultado sea correcto.
  • La estructura de la tabla permanece: DELETE elimina solo datos, no la tabla en sí ni sus columnas.
  • Los datos relacionados importan: si se definen claves foráneas, la base de datos puede impedir la eliminación de filas que son referenciadas por otras tablas.
  • Transacciones: en sistemas de producción, es más seguro realizar eliminaciones importantes dentro de una transacción.

Ejemplos

Ejemplo 1: Eliminando una fila

Eliminemos un cliente por su identificador:

DELETE FROM customer
WHERE customer_id = 1;

Nota: gracias a WHERE customer_id = 1, solo se eliminará una fila específica.

Ejemplo 2: Eliminando múltiples filas por condición

Eliminemos registros de pagos realizados antes de una cierta fecha:

DELETE FROM payment
WHERE payment_date < '2005-05-25';

Resultado: todas las filas en payment con una fecha de pago anterior a la fecha especificada serán eliminadas.

Ejemplo 3: Eliminando con una subconsulta

A veces necesitas eliminar filas basadas en una condición de otra tabla. Por ejemplo, eliminemos los pagos realizados por clientes inactivos:

DELETE FROM payment
WHERE customer_id IN (
    SELECT customer_id
    FROM customer
    WHERE active = 0
);

Resultado: todos los pagos de clientes marcados como inactivos serán eliminados.

Ejemplo 4: Eliminando todas las filas de una tabla

Si necesitas limpiar completamente una tabla, DELETE también se puede usar sin WHERE:

DELETE FROM temp_import;

Nota: la tabla temp_import seguirá existiendo, pero todas sus filas serán eliminadas.


Verificación antes de eliminar

Una buena práctica es primero inspeccionar qué filas se verán afectadas:

-- Primero verifica las filas
SELECT customer_id, first_name, last_name, active
FROM customer
WHERE active = 0;

-- Solo después de verificar, ejecuta el DELETE
DELETE FROM customer
WHERE active = 0;

Este enfoque ayuda a evitar eliminar accidentalmente datos adicionales.


Cuándo es especialmente útil DELETE

  • limpiar datos temporales o de prueba;
  • eliminar registros desactualizados por fecha;
  • eliminar filas que ya no cumplen con las reglas de negocio;
  • preparar tablas para recargar datos.

Puntos clave de esta lección:

  • DELETE elimina filas existentes de una tabla.
  • Sin WHERE, todas las filas en la tabla serán eliminadas.
  • Antes de eliminar, es recomendable ejecutar SELECT con la misma condición.
  • DELETE mantiene la estructura de la tabla intacta: solo se eliminan los datos.
  • En escenarios importantes, es más seguro usar transacciones y considerar las claves foráneas.