Ir al contenido principal

SQL ON DELETE CASCADE: Eliminar automáticamente los datos dependientes

Comprende cómo SQL ON DELETE CASCADE automatiza las eliminaciones dependientes en SQL, mantiene la coherencia de las tablas y ayuda a evitar la pérdida accidental de datos.
Actualizado 16 ene 2026  · 9 min leer

Eliminar datos en SQL no consiste solo en borrar una sola fila. En una base de datos relacional, las tablas suelen estar vinculadas entre sí, por lo que eliminar una tabla puede afectar a otras. Para gestionar esto de forma segura, SQL utiliza restricciones de claves externas para definir cómo deben comportarse los datos relacionados cuando se eliminan o actualizan filas.

Una de las opciones de eliminación más potentes es la restricción SQL « ON DELETE CASCADE » (no se permite la eliminación). En lugar de bloquear una eliminación o dejar registros huérfanos, esta regla indica a la base de datos que elimine automáticamente todas las filas secundarias dependientes cuando se elimina una fila principal a la que se hace referencia.

En este tutorial, mostraré cómo funciona la restricción « ON DELETE CASCADE », por qué las bases de datos admiten eliminaciones en cascada automáticas y cuándo es la opción adecuada en comparación con reglas más restrictivascomo «ON DELETE RESTRICT».  Sieres nuevo en SQL, comienza con nuestro curso Introducción a SQL, o con el curso SQL intermedio si ya tienes algo de experiencia. 

¿Qué es ON DELETE CASCADE en SQL?

Para comprender cómo funciona la restricción de clave externa « ON DELETE CASCADE », primero voy a explicar la integridad referencial y la cláusula « CASCADE ».

Integridad referencial y claves externas

En las bases de datos relacionales, las tablas están conectadas a través de claves externas, que vinculan una columna de una tabla (la secundaria) con una clave principal de otra tabla (la principal). Las claves externas garantizan la integridad referencial para asegurar que una fila secundaria siempre apunte a una fila principal válida. 

Sin esta medida, las bases de datos podrían acabar fácilmente con registros huérfanos, en los que las filas hacen referencia a datos que ya no existen. Por lo tanto, existen reglas de eliminación para indicar a la base de datos exactamente cómo manejar estos casos aislados antes incluso de que se produzcan.

¿Qué significa realmente CASCADE?

En SQL, la restricción « ON DELETE CASCADE » (Eliminación ascendente) indica a la base de datos que elimine automáticamente todas las filas secundarias que hacen referencia a la fila principal eliminada. Activa la operación de forma recursiva a través de cadenas de claves externas, eliminando los datos dependientes en una transacción atómica e.

Por ejemplo, puedes eliminar un registro de cliente de la base de datos y esto provocará la eliminación de sus pedidos, lo que a su vez eliminará los artículos de los pedidos en una sola consulta.

Cómo funciona ON DELETE CASCADE en la práctica

Ahora que ya sabes lo que hace CASCADE, veamos cómo aplica la lógica la base de datos.

Relaciones entre tablas padre e hijo

Como ya sabes, las relaciones entre bases de datos tienen una tabla que actúa como padre, que contienela clave principal, mientras que otra actúa como hijo, que almacena esa clave como clave externa. Cuando consultas una instrucción DELETE en la tabla principal, el motor de la base de datos comprueba primero las restricciones de clave externa para identificar todas las dependenciasnts mediante la indexación paramayor rapidez.

¿Qué ocurre cuando se elimina una fila principal?

Cuando ejecutas un comando ` DELETE ` en una fila principal, la base de datos pausa la ejecución final para comprobar sus reglas de clave externa en el siguiente orden:

  • Identificación: El motor consulta el índice de clave externa para encontrar todas las filas de las tablas secundarias que coincidan con el ID que se va a eliminar.
  • Ejecución: Antes (o durante) la eliminación de la fila principal, el motor elimina las filas secundarias identificadas.
  • Validación: La base de datos garantiza que no queden filas huérfanas. Si todas las eliminaciones se realizan correctamente, la transacción se finaliza.

Ten en cuenta que el proceso anterior solo se producirá si has definido la restricción « ON DELETE CASCADE », como veremos más adelante en el artículo.

ON DELETE CASCADE frente a. Otras reglas de eliminación

En SQL, existen diferentes reglas de relaciones entre tablas ( DELETE ) que indican a la base de datos cómo manejar los datos relacionados con diferentes tablas. En esta sección, compararemos ON DELETE CASCADE con estas restricciones.

CASCADE contra RESTRINGIR

De la explicación anterior, vemos que CASCADE elimina automáticamente todas las filas secundarias dependientes cuando se elimina una fila principal, lo que garantiza que no queden registros huérfanos.

Sin embargo, la restricción SQL « RESTRICT » bloquea por completo la operación de eliminación si alguna fila secundaria sigue haciendo referencia a la fila principal. Esta operación garantiza que no se produzca ninguna pérdida accidental de datos. En el ejemplo siguiente, la restricción « RESTRICT » (Eliminación no permitida si hay pedidos pendientes) impide eliminar un cliente si hay pedidos que hacen referencia a él.

-- Parent table
CREATE TABLE customers (
    customer_id INT PRIMARY KEY,
    name VARCHAR(100)
);

-- Child table with ON DELETE RESTRICT
CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    customer_id INT,
    CONSTRAINT fk_orders_customers
        FOREIGN KEY (customer_id)
        REFERENCES customers(customer_id)
        ON DELETE RESTRICT
);

CASCADE contra SET NULL y SET DEFAULT

Mientras que CASCADE elimina por completo las filas dependientes, SET NULL y SET DEFAULT conservan las filas secundarias de las siguientes maneras:

Cuando defines tu restricción como « ON DELETE SET NULL », la fila principal se elimina, pero los valores de la clave externa en la tabla secundaria se establecen como « NULL ».

En el ejemplo siguiente, al eliminar un cliente no se eliminan los pedidos asociados. En su lugar, la columna « customer_id » de la tabla « orders » se establece automáticamente en « NULL ». Esto conserva los registros de pedidos, pero rompe la relación con el cliente eliminado.

-- Child table using ON DELETE SET NULL
CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    customer_id INT NULL,
    CONSTRAINT fk_orders_customers
        FOREIGN KEY (customer_id)
        REFERENCES customers(customer_id)
        ON DELETE SET NULL
);

Del mismo modo, con la opción « SET DEFAULT » (Eliminar cliente), al eliminar un cliente no se eliminan los pedidos relacionados. En su lugar, el campo « customer_id » (Estado de la solicitud) de la tabla « orders » (Solicitantes de la licencia de conducir) se restablece a su valor predeterminado definido. Esto mantiene intactos los registros de pedidos y les asigna un marcador de posición predefinido.

-- Child table using ON DELETE SET DEFAULT
CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    customer_id INT DEFAULT 0,
    CONSTRAINT fk_orders_customers
        FOREIGN KEY (customer_id)
        REFERENCES customers(customer_id)
        ON DELETE SET DEFAULT
);

Creación de claves externas con ON DELETE CASCADE

Para utilizar la restricción « ON DELETE RESTRICT » en SQL, debes especificarla al establecer la relación de clave externa entre las tablas principal y secundaria.

CASCADE en esquemas de tablas

Puedes definir la regla « ON DELETE CASCADE » en SQL al crear tablas o al modificar tablas existentes.

El siguiente ejemplo muestra cómo aplicar la restricción de clave externa SQL « ON DELETE CASCADE » al definir una nueva tabla. Con CASCADE, al eliminar un departamento se eliminan automáticamente todos los empleados asociados a ese departamento.

-- Stores department details
CREATE TABLE departments (
    department_id INT PRIMARY KEY, 
    department_name VARCHAR(100)
);

-- Automatically deletes employees when their department is deleted
CREATE TABLE employees (
    employee_id INT PRIMARY KEY,      -- Unique employee identifier
    department_id INT, 
    CONSTRAINT fk_employees_departments
        FOREIGN KEY (department_id)
        REFERENCES departments(department_id)
        ON DELETE CASCADE
);

Si la tabla ya existe, puedes añadir una restricción de clave externa con ON DELETE CASCADE. Por lo tanto, si eliminas un departamento, se eliminarán automáticamente todos los registros de empleados relacionados.

-- Adds a foreign key constraint after the table already exists
ALTER TABLE employees
ADD CONSTRAINT fk_employees_departments
FOREIGN KEY (department_id)
REFERENCES departments(department_id)
ON DELETE CASCADE;    -- Deletes employees when the related department is deleted

Cadenas en cascada y eliminaciones multinivel

Una de las potentes características de CASCADE es que las eliminaciones no se limitan a una sola relación. Si una tabla secundaria también es principal de otra tabla, la eliminación puede propagarse a través de varios niveles, lo que se denomina cadenas en cascada. Por ejemplo, al eliminar un usuario se pueden eliminar pedidos, lo que a su vez elimina artículos de pedidos, lo que puede eliminar filas de auditoría relacionadas.

Por lo tanto, es importante documentar y revisar cuidadosamente los esquemas que utilizan CASCADE. Dado que una sola instrucción de eliminación puede afectar a muchas tablas, debes comprender la cadena de dependencia completa antes de habilitar el comportamiento en cascada.

Casos de uso comunes para ON DELETE CASCADE

La restricción « ON DELETE CASCADE » (requisito de referencias externas) en SQL es importante en situaciones en las que los datos de la tabla secundaria no tienen valor sin el registro principal. Veamos su aplicación en la gestión de bases de datos en el mundo real.

Limpieza automática de datos dependientes

Puedes utilizar ON DELETE CASCADE para limpiar datos en los que la limpieza manual resultaría ineficaz. Entre ellas se incluyen tablas como registros, historiales, pistas de auditoría o tablas de unión muchos a muchos que a menudo existen únicamente para dar soporte a un registro principal. Por ejemplo:

  • Al eliminar un usuario, se debe eliminar tu historial de inicio de sesión.
  • Al eliminar un pedido, se deben eliminar también los artículos que lo componen.
  • Al eliminar un producto, se deben eliminar las entradas de la tabla de asignación de categorías de productos.

Simplificación de la gestión del ciclo de vida de los datos

También puedes utilizar CASCADE para trasladar las reglas del ciclo de vida de los datos a la base de datos. En lugar de depender del código de la aplicación para encontrar registros relacionados, eliminarlos en el orden correcto y gestionar casos extremos y fallos, la base de datos aplica estas reglas de forma coherente y atómica.

De esta manera, CASCADE garantiza que, independientemente de cómo se active la eliminación, ya sea a través de una aplicación, un script o una consulta administrativa, el resultado siempre sea coherente.

Riesgos y dificultades de ON DELETE CASCADE

Aunque la restricción « ON DELETE CASCADE » puede resultar útil, su uso incorrecto puede entrañar riesgos. Es importante comprender los errores habituales a la hora de diseñar restricciones eficientes de CASCADE.

Eliminaciones masivas accidentales

El riesgo más común con CASCADE son las eliminaciones accidentales a gran escala. Una sola instrucción « DELETE » en una tabla principal puede eliminar silenciosamente cientos o miles de filas relacionadas en varias tablas. Esta acción puede provocar una pérdida inesperada de datos que puede ser difícil de recuperar si no se comprende correctamente la relación entre las tablas. 

Como práctica recomendada, asegúrate siempre de poder rastrear la relación entre las claves externas en las tablas principales y secundarias. Si consigues el esquema correcto, sabrás qué tablas se verían afectadas por una sola eliminación.

Dependencias ocultas en esquemas complejos

A medida que las bases de datos crecen, las tablas acumulan claves externas adicionales y la documentación puede dejar de estar sincronizada con la realidad. El reto surge cuando se implementa CASCADE en este tipo de entornos, ya que las eliminaciones pueden propagarse a través de cadenas de dependencias profundamente anidadas que los programadores o administradores desconocen.

Por mi experiencia, te recomiendo que combines CASCADE con una documentación clara del esquema y una revisión periódica de las relaciones de claves externas.

Pruebanuestroprograma formativo SQL Server para administradores de bases de datossi diseñas o mantienes bases de datos de forma habitual como parte de tu trabajo. 

Notas y comportamiento específicos de la base de datos

Aunque el concepto de « ON DELETE CASCADE » (ejecutar una vez) es estándar en todas las bases de datos relacionales, cada motor gestiona la ejecución subyacente con ligeras diferencias.

Comportamiento de PostgreSQL, MySQL y SQL Server

PostgreSQL, MySQL y SQL Serveradmiten la cláusula« ON DELETE CASCADE » y la implementan de la misma manera, con las siguientes excepciones:

  • MySQL:CASCADE funciona bien con InnoDB, pero evita las cascadas circulares.

  • PostgreSQL: Más flexible y permisivo con cadenas de eliminación en cascada.

  • SQL Server: Más seguro, pero más restrictivo debido a las múltiples reglas de ruta en cascada.

Ámbito de la transacción y seguridad de la reversión

Las eliminaciones en cascada se ejecutan dentro de la misma transacción que la instrucción de eliminación original. Si la base de datos encuentra un error al intentar eliminar una fila secundaria, toda la operación falla. La fila principal no se elimina y las filas secundarias que ya se hayan eliminado se restauran.

Este comportamiento transaccional proporciona una importante red de seguridad. Te permite probar, revisar o revertir eliminaciones en cascada antes de confirmarlas.

Elegir la estrategia ON DELETE adecuada

A estas alturas, ya sabes que elegir la estrategia de eliminación correcta depende de cómo se relacionan tus datos y cómo quieres que se comporten a lo largo del tiempo. Ten en cuenta las siguientes directrices para elegir la opción adecuada de DELETE para tu esquema.

Cuando CASCADE es la elección adecuada

Debes utilizar la restricción « ON DELETE CASCADE » cuando los datos secundarios dependan completamente de los principales en cuanto a su significado o existencia. Por ejemplo, puedes utilizarlo en lo siguiente:

  • Unir tablas en relaciones muchos a muchos
  • Datos temporales o derivados, como registros o entradas del historial.

En los casos anteriores, la limpieza automática garantiza la coherencia y reduce la lógica de eliminación manual necesaria en la capa de aplicación.

Recomiendo realizar nuestro curso Joining Data in SQL (Unir datos en SQL)para aprender los diferentes tipos de uniones en SQL y cómo trabajar con diferentes tablas relacionadas en la base de datos.

Cuándo evitar CASCADE

Sin embargo, debes evitar la restricción « ON DELETE CASCADE » en tu esquema si los datos secundarios tienen un valor independiente o deben conservarse por motivos legales, de auditoría o analíticos. Por ejemplo, no puedes utilizar CASCADE en:

  • Registros financieros y facturas
  • Registros de auditoría y datos de cumplimiento, como datos sanitarios.

Para estos casos, recomiendo utilizar reglas restrictivas, como RESTRICT, SET NULL o eliminaciones gestionadas por la aplicación, para proporcionar un mayor control y visibilidad.

Conclusión

La restricción SQL « ON DELETE CASCADE » (no eliminar filas sin datos) es una potente herramienta de automatización que preserva la integridad referencial al eliminar automáticamente los datos dependientes cuando se elimina una fila principal. Cuando se utiliza correctamente, simplifica la limpieza, reduce la lógica de eliminación manual y garantiza un comportamiento coherente en todas las aplicaciones y scripts. Para evitar eliminaciones involuntarias, ten cuidado al utilizar CASCADE si no comprendes completamente las relaciones en el esquema de la base de datos.

Te recomiendo que realices nuestro curso de Diseño de bases de datos, en el que aprenderás a crear y gestionar bases de datos, así como a seleccionar el sistema de gestión de bases de datos (DBMS) más adecuado a tus necesidades. También recomiendo probar nuestro programa de formación para ingenieros de datos asociados en SQL para aprender los fundamentos de la ingeniería de datos y el almacenamiento de datos.  


Allan Ouko's photo
Author
Allan Ouko
LinkedIn
Creo artículos que simplifican la ciencia de los datos y la analítica, haciéndolos fáciles de entender y accesibles.

Preguntas frecuentes sobre SQL ON DELETE CASCADE

¿ON DELETE CASCADE elimina primero las filas secundarias o las filas principales?

ON DELETE CASCADE Elimina primero las filas secundarias para preservar la integridad referencial.

¿En qué se diferencia ON DELETE CASCADE de RESTRICT?

CASCADE Elimina automáticamente las filas dependientes, mientras que RESTRICT bloquea la eliminación si existen filas secundarias.

¿En qué se diferencia ON DELETE CASCADE de SET NULL?

CASCADE Elimina las filas secundarias; SET NULL las conserva, pero borra la referencia de clave externa.

¿Se puede revertir ON DELETE CASCADE?

Sí, las eliminaciones en cascada se producen dentro de una transacción y puedes revertirlas antes de confirmarlas.

¿Es ON DELETE CASCADE el comportamiento predeterminado en SQL?

No, debes definir explícitamente ON DELETE CASCADE en la restricción de clave externa al crear una tabla o en una tabla existente.

Temas

Aprende SQL con DataCamp

Curso

Introducción a las bases de datos relacionales en SQL

4 h
181.7K
Aprende a crear bases de datos relacionales, una de las formas más eficaces de almacenar datos.
Ver detallesRight Arrow
Iniciar curso
Ver másRight Arrow
Relacionado

blog

10 proyectos SQL listos para tu portafolio, aptos para todos los niveles

Selecciona tu primer proyecto SQL, o el siguiente, para practicar tus habilidades actuales en SQL, desarrollar otras nuevas y crear un portafolio profesional excepcional.
Elena Kosourova's photo

Elena Kosourova

11 min

Tutorial

Introducción a los disparadores SQL: Guía para desarrolladores

Aprende a utilizar los disparadores SQL para automatizar tareas, mantener la integridad de los datos y mejorar el rendimiento de la base de datos. Prueba ejemplos prácticos como los comandos CREATE, ALTER y DROP en MySQL y Oracle.
Oluseye Jeremiah's photo

Oluseye Jeremiah

Tutorial

Seleccionar varias columnas en SQL

Aprende a seleccionar fácilmente varias columnas de una tabla de base de datos en SQL, o a seleccionar todas las columnas de una tabla en una simple consulta.
DataCamp Team's photo

DataCamp Team

Tutorial

Cómo utilizar un alias SQL para simplificar tus consultas

Explora cómo el uso de un alias SQL simplifica tanto los nombres de las columnas como los de las tablas. Aprende por qué utilizar un alias SQL es clave para mejorar la legibilidad y gestionar uniones complejas.
Allan Ouko's photo

Allan Ouko

Tutorial

Ejemplos y tutoriales de consultas SQL

Si quiere iniciarse en SQL, nosotros le ayudamos. En este tutorial de SQL, le presentaremos las consultas SQL, una potente herramienta que nos permite trabajar con los datos almacenados en una base de datos. Verá cómo escribir consultas SQL, aprenderá sobre
Sejal Jaiswal's photo

Sejal Jaiswal

Tutorial

Cómo utilizar GROUP BY y HAVING en SQL

Una guía intuitiva para descubrir los dos comandos SQL más populares para agregar filas de tu conjunto de datos
Eugenia Anello's photo

Eugenia Anello

Ver másVer más