Volver a la lista de artículos Artículos
Lectura de 7 minutos

¿Qué es la sentencia DELETE en SQL?

Este artículo explicará el uso de la sentencia DELETE, uno de los principales métodos para eliminar registros existentes de tu base de datos. Primero repasaremos la sintaxis, seguida de algunos ejemplos fáciles de entender.

La sentencia DELETE en SQL es extremadamente útil. Le permite eliminar cualquier dato obsoleto o "malo" de las tablas de su base de datos. Debe tener cuidado al utilizar la sentencia DELETE, ya que la operación no es reversible. No habrá ningún cuadro de diálogo que le pida que confirme la operación. Una vez ejecutada la consulta DELETE, los datos desaparecerán para siempre.

La sentencia DELETE se conoce como un comando de manipulación de datos. Este artículo cubre los otros comandos de este tipo, que son INSERT y UPDATE.

Exploremos la sintaxis de SQL DELETE.

Sintaxis de SQL DELETE

La sintaxis de la sentencia DELETE es la siguiente:

DELETE FROM  [WHERE ]

La tabla de la que quieres borrar datos viene después de la sentencia DELETE.

Los corchetes indican que esta cláusula WHERE es totalmente opcional. Sin embargo, en la práctica, esta cláusula se utilizará casi siempre: si no se incluye la cláusula WHERE, se eliminarán todos los datos de la tabla.

Por eso, siempre es una buena idea utilizar SELECT para ver los datos que desea eliminar. Cuando el resultado de su consulta SELECT sea igual a los datos que desea eliminar, simplemente sustituya la cláusula SELECT de su consulta por la sentencia DELETE. El resto de la consulta puede permanecer igual. Esto asegurará que no elimine accidentalmente algunos datos vitales por error.

Con esto concluye nuestra mirada a la sintaxis de SQL DELETE. Es hora de ver algunos ejemplos prácticos, que demostrarán algunos usos diferentes de la sentencia DELETE y tocarán algunos problemas de permisos que puedes enfrentar.

Permisos SQL DELETE

Antes de revisar nuestros ejemplos, es importante tener en cuenta que (dependiendo del dialecto SQL que utilice) puede que tenga que cambiar los permisos de usuario para poder modificar los registros con la sentencia DELETE.

Por defecto, MySQL Workbench se inicia en modo seguro; no puede utilizar UPDATE o DELETE sin una condición WHERE.

Por ejemplo, al utilizar MySQL se encontrará con el mensaje: "Está utilizando el modo de actualización seguro y ha intentado actualizar una tabla sin un WHERE que utiliza una columna KEY. Para desactivar el modo seguro, active la opción en Preferencias → Editor SQL y vuelva a conectarse".

Para rectificar esto, tienes dos opciones.

  1. Cambie su configuración así:
    1. Vaya a Editar →
    2. Haga clic en la pestaña Editor de SQL y desmarque la casilla Actualizaciones seg uras.
    3. Haga clic en Consulta → Reconectar con el servidor.
    4. Ejecute su consulta SQL.
  2. O puede ejecutar la siguiente consulta:
    SET SQL_SAFE_UPDATES = 0;

Después de completar cualquiera de estas opciones, debería poder utilizar DELETE para eliminar los datos de sus tablas.

Ahora, ¡pasemos a los ejemplos!

Ejemplos de DELETE SQL

DELETE simple

Imagina que mantenemos una base de datos de empleados y acabamos de recibir la noticia de que algunos de nuestros empleados han dejado la empresa. Vamos a eliminarlos de nuestra employees tabla. Veamos el estado actual de esta tabla:

employee_idfirst_namelast_nameage
1JohnLennon34
2PaulMcCartney36
3GeorgeHarrison41
4RingoStarr49

Imagina que tenemos que eliminar a George Harrison y Ringo Starr de nuestra tabla. ¿Cuáles son nuestras opciones?

Deberíamos asegurarnos de los valores de la columna employee_id antes de eliminar estos registros. Una vez hecho esto, la consulta DELETE tendría el siguiente aspecto:

DELETE FROM employees
WHERE employee_id = 3 OR employee_id = 4

Esto eliminaría con éxito a George y Ringo de nuestra tabla.

También puede especificar una sola condición que capture ambos registros a la vez. En este caso, como tanto George como Ringo tienen más de 40 años, podríamos utilizar la columna age:

DELETE FROM employees
WHERE age > 40

La ejecución de esta consulta nos dejará los siguientes registros en nuestra tabla employees tabla.

employee_idfirst_namelast_nameage
1JohnLennon34
2PaulMcCartney36

Nuestros registros han sido eliminados con éxito. Si quiere ver más ejemplos de DELETE, consulte este artículo del libro de recetas, que muestra cómo eliminar una o varias filas de datos.

Veamos ahora un ejemplo más avanzado que utiliza una subconsulta para eliminar datos.

Subconsulta DELETE

También puede eliminar datos de sus tablas utilizando subconsultas. Una subconsulta es cuando una consulta se utiliza como parte de otra. Puedes aprender más sobre las subconsultas leyendo este artículo para principiantes. Veamos un escenario en el que podemos utilizar un DELETE con una subconsulta.

Vamos a utilizar nuestra employees tabla de nuevo:

employee_idfirst_namelast_nameage
1JohnLennon34
2PaulMcCartney36
3GeorgeHarrison41
4RingoStarr49

También tenemos una tabla sales_team que contiene los registros de todos los miembros del departamento de ventas de la empresa:

idfirst_namelast_name
1JohnLennon
3GeorgeHarrison

Acabamos de recibir la terrible noticia de que el equipo de ventas va a ser despedido. Nuestro trabajo consiste en actualizar las tablas employees y sales_team tablas.

Demostraré cómo una subconsulta puede ayudarnos en este escenario particular. Aquí está la consulta:

DELETE FROM employees
WHERE employee_id 
IN (SELECT id
FROM sales_team)

Ok, vamos a desglosar esto.

La consulta entre corchetes (es decir, la subconsulta) devuelve todos los valores de id de la tabla sales_team tabla:

SELECT id FROM sales_team

Esta consulta nos da los valores 1 y 3.

Veamos la parte DELETE de la consulta principal:

DELETE FROM employees
WHERE employee_id 
IN...

Fíjate en la cláusula WHERE. En esta parte de la consulta, buscamos eliminar los registros en los que el employee_id está en los resultados de nuestra subconsulta. Recuerde que la subconsulta se evaluó con 1 y 3. Por lo tanto, esta consulta se evalúa a:

DELETE FROM employees
WHERE employee_id 
IN (1,3)

Supongamos que ejecutamos la consulta completa y utilizamos la consulta SELECT para ver los resultados:

SELECT employee_id, first_name, last_name, age
FROM employees

Esto es lo que obtenemos:

employee_idfirst_namelast_nameage
2PaulMcCartney36
4RingoStarr49

¡Ahí lo tenemos! El equipo de ventas se ha eliminado con éxito de la tabla employees tabla. Puede ver la utilidad de una subconsulta para este caso de uso.

Este ha sido un caso de uso un poco más avanzado. Al hablar de la sentencia DELETE, conviene mencionar las sentencias TRUNCATE y DROP:

  • TRUNCATE es más rápida que DELETE, ya que no explora la tabla antes de eliminar los registros. Debido a este hecho, no puede ser utilizada con la condición WHERE o decirle cuántas filas fueron eliminadas cuando la operación está completa.
  • El comando DROP TABLE eliminará todo lo relacionado con esa tabla: la definición de la tabla y todos los índices, desencadenantes y restricciones relacionados.

Para saber más sobre estos dos métodos de eliminación de datos, lee este artículo sobre cómo utilizar subconsultas con INSERT, UPDATE y DELETE. También puede consultar este artículo que analiza la diferencia entre DELETE, TRUNCATE y DROP.

Eliminación de Restricciones de Clave Primaria y Clave Foránea

Una cosa más que debemos discutir es la clave primaria (PK) y las restricciones de clave foránea (FK). Cuando trabaje con ejemplos más pequeños como los que se muestran en este artículo, no tendrá que preocuparse por las restricciones PK y FK. Pero si trabajas con una base de datos grande, seguro que te encontrarás con ellas.

Al eliminar datos de una tabla, es posible que también quiera eliminar cualquier restricción asociada a los datos de esa tabla. Compruebe los siguientes ejemplos si esto se aplica a usted:

  • Este ejemplo muestra cómo eliminar una clave primaria.
  • Este ejemplo muestra cómo eliminar una restricción de clave foránea.

Mantenga sus datos relevantes con SQL DELETE

Con esto concluimos nuestro análisis exhaustivo de la sentencia SQL DELETE. Hemos demostrado su sintaxis y explorado los usos potenciales de este comando a través de varios ejemplos.

Si desea obtener una formación más completa sobre SQL, consulte nuestra ruta de aprendizaje de SQL de la A a la Z, en la que se enseñan los conceptos básicos y se pasa a temas más avanzados.