system onlinepath: /guias/bases-de-datos/como-eliminar-registros-duplicados-con-sql/mode: knowledge_baselocal:
Bases de datos · Nivel intermedio

Cómo eliminar registros duplicados con SQL

Los datos duplicados ensucian una base de datos: inflan los conteos, confunden los informes y rompen la integridad. Eliminarlos con SQL no es difícil, pero el paso que se salta todo el mundo es el primero: definir con precisión qué cuenta como duplicado.

21 min de lectura▣ Actualizada el ◇ Por Underc0de
Respuesta rápida

Eliminar registros duplicados con SQL tiene un orden que conviene respetar, y el paso que casi todo el mundo se salta es el primero: definir qué cuenta como duplicado. Dos filas «duplicadas» no siempre son idénticas en todas sus columnas —a veces basta con que coincidan en las que importan (el mismo correo, el mismo documento) aunque difieran en otras (fecha de alta, un identificador)—. Sin decidir por qué columnas se considera duplicado, no se puede detectar ni borrar bien. Con eso claro, el proceso es: (1) detectar los duplicados agrupando por esas columnas y contando cuántas veces aparece cada combinación —con GROUP BY sobre las columnas clave y HAVING COUNT(*) > 1, que muestra justo los grupos que se repiten—; (2) decidir cuál conservar de cada grupo (normalmente el más antiguo o el de menor identificador, para no perder el registro original); y (3) borrar el resto con un DELETE que elimine los duplicados dejando uno por grupo. La técnica concreta del borrado varía según el motor (con subconsultas, con funciones de ventana como ROW_NUMBER(), o con tablas auxiliares), pero la lógica es siempre la misma: identificar los grupos repetidos y quedarse con uno. Dos precauciones innegociables: primero, hacer una copia de seguridad antes de cualquier borrado, porque un DELETE mal hecho es difícil o imposible de deshacer; y segundo, probar primero con un SELECT —ejecutar la consulta que muestra qué se va a borrar antes de convertirla en un DELETE—, para confirmar que borra exactamente lo que debe. Y para que el problema no vuelva: una vez limpios los duplicados, la prevención es poner una restricción de unicidad (una clave única) sobre las columnas que definen el duplicado, de modo que la base de datos rechace automáticamente cualquier nuevo duplicado. Detectar con GROUP BY, borrar con cuidado y prevenir con una restricción: ese es el ciclo completo.

Ver índice de contenidos
  1. 01Qué es un duplicado
  2. 02Detectar y borrar
  3. 03Prevenir y precauciones
  4. 04Errores frecuentes
  5. 05Preguntas frecuentes
  6. 06Fuentes

Qué es un duplicado

Antes de borrar nada, hay que responder una pregunta que parece obvia pero no lo es: ¿qué es un duplicado aquí? El error de principiante es asumir que un duplicado es una fila idéntica en todas sus columnas. A veces es así, pero muy a menudo no: dos registros pueden ser el «mismo» desde el punto de vista del negocio aunque difieran en algunas columnas. Dos filas con el mismo correo electrónico probablemente son la misma persona, aunque tengan distinta fecha de alta o distinto identificador. Definir un duplicado es, por tanto, decidir por qué columnas se considera que dos filas son la misma cosa. Sin esa decisión, cualquier intento de detectar o borrar duplicados es a ciegas.

Las columnas que definen la identidad

La clave de toda la operación es identificar las columnas que definen la identidad del registro para tu caso concreto. Preguntate: «¿qué combinación de columnas, si se repite, significa que es el mismo elemento del mundo real?». Para una tabla de clientes puede ser el documento de identidad o el correo; para productos, el código de referencia; para una tabla de logs, quizá la combinación de usuario + acción + momento. Esas columnas son las que usarás para agrupar al detectar los duplicados. Es importante entender que la misma tabla puede tener definiciones distintas de duplicado según el objetivo: a veces querés eliminar filas exactamente iguales, y a veces querés unificar registros que representan la misma entidad aunque difieran en detalles. Tener esta definición clara antes de escribir el SQL evita borrar de más (perder datos legítimos) o de menos (dejar duplicados sin limpiar).

Detectar y borrar

Diagrama que explica cómo eliminar registros duplicados en una base de datos con SQL siguiendo un orden de pasos. En la parte superior se destaca que el paso que casi todo el mundo se salta es el primero, definir qué cuenta como duplicado, ya que dos filas duplicadas no siempre son idénticas en todas sus columnas, sino que a veces basta con que coincidan en las que importan, como el mismo correo o el mismo documento, aunque difieran en otras como la fecha de alta o un identificador, por lo que hay que decidir por qué columnas se considera duplicado. En el centro se muestra el proceso en tres pasos. El primer paso es detectar los duplicados agrupando por las columnas clave y contando cuántas veces aparece cada combinación, usando la agrupación y la condición de que el conteo sea mayor que uno, lo que muestra justo los grupos que se repiten. El segundo paso es decidir cuál conservar de cada grupo, normalmente el más antiguo o el de menor identificador, para no perder el registro original. El tercer paso es borrar el resto con una instrucción de borrado que elimine los duplicados dejando uno por grupo. Se indica que la técnica concreta del borrado varía según el motor de base de datos, con subconsultas, funciones de ventana o tablas auxiliares, pero que la lógica es siempre la misma. En la parte inferior se subrayan dos precauciones innegociables. La primera es hacer una copia de seguridad antes de cualquier borrado, porque un borrado mal hecho es difícil o imposible de deshacer. La segunda es probar primero con una consulta de selección que muestre qué se va a borrar antes de convertirla en un borrado, para confirmar que elimina exactamente lo que debe. También se muestra la prevención para que el problema no vuelva, que consiste en poner una restricción de unicidad sobre las columnas que definen el duplicado una vez limpios, de modo que la base de datos rechace automáticamente cualquier nuevo duplicado. Estilo de bases de datos, limpio y ordenado, con la definición del duplicado arriba, el proceso de detectar y borrar en el centro y las precauciones y la prevención abajo.
El proceso ordenado: primero definir qué es un duplicado (por qué columnas); detectarlos agrupando por esas columnas y contando (GROUP BY con HAVING COUNT mayor que 1); decidir cuál conservar de cada grupo; y borrar el resto. Precauciones innegociables: copia de seguridad antes de borrar y probar primero con un SELECT.

Con la definición clara, el proceso técnico. El SQL para detectar y comprobar:

-- 1. DETECTAR: ¿qué combinaciones se repiten? (duplicado = mismo email)
SELECT email, COUNT(*) AS veces
FROM clientes
GROUP BY email
HAVING COUNT(*) > 1;
-- Muestra cada email que aparece más de una vez y cuántas veces

-- 2. COMPROBAR antes de borrar: ver las filas que se eliminarían
--    (conservando la de menor id de cada grupo)
SELECT *
FROM clientes c
WHERE id NOT IN (
  SELECT MIN(id) FROM clientes GROUP BY email
);
-- Ejecutar este SELECT primero: son las filas que el DELETE borrará

-- 3. BORRAR: eliminar los duplicados dejando uno por grupo
--    (SOLO tras copia de seguridad y tras comprobar con el SELECT de arriba)
DELETE FROM clientes
WHERE id NOT IN (
  SELECT MIN(id) FROM clientes GROUP BY email
);
i
GROUP BY + HAVING: el detector de duplicados

La herramienta central para detectar duplicados es la combinación de GROUP BY y agregaciones. La idea: GROUP BY agrupa las filas por las columnas que definen el duplicado, y COUNT(*) cuenta cuántas filas hay en cada grupo. Un grupo con una sola fila es un valor único; un grupo con dos o más es un duplicado. La cláusula HAVING COUNT(*) > 1 filtra justo esos —los grupos que se repiten—, dándote la lista exacta de duplicados. Para el borrado, la lógica es «quedarse con uno de cada grupo y borrar el resto»: se elige un criterio para el que se conserva (el de menor identificador con MIN(id), que suele ser el más antiguo/original, es lo habitual) y se borran los demás. La técnica concreta varía por motor —subconsultas como en el ejemplo, o funciones de ventana como ROW_NUMBER() que numeran las filas dentro de cada grupo y permiten borrar las que tengan número mayor que 1—, pero el concepto es idéntico. Lo esencial es siempre lo mismo: agrupar por las columnas de identidad, y quedarse con una fila por grupo.

Prevenir y precauciones

Borrar duplicados es una cura; lo ideal es la prevención. Y antes de cualquier borrado, dos precauciones que no se negocian:

  • Copia de seguridad primero. Antes de ejecutar cualquier DELETE, respaldar la tabla o la base de datos. Un borrado mal hecho es difícil o imposible de deshacer.
  • Probar con SELECT antes del DELETE. Convertir el DELETE en un SELECT primero para ver exactamente qué filas se eliminarían, y confirmar que son las correctas.
  • Borrar dentro de una transacción. Así se puede revertir si el resultado no es el esperado antes de confirmar.
  • Prevenir con una restricción de unicidad. Tras limpiar, poner una clave única en las columnas que definen el duplicado, para que la base rechace nuevos duplicados.
!
La prevención definitiva: una restricción de unicidad

Limpiar los duplicados una vez está bien, pero si la causa que los generó sigue ahí, volverán. La solución de fondo es hacer que la base de datos impida los duplicados por diseño, mediante una restricción de unicidad (una clave única) sobre las columnas que definen el duplicado. Con esa restricción puesta, cualquier intento de insertar una fila que repita esa combinación es rechazado automáticamente por la base de datos, así que los duplicados no pueden entrar. Un detalle: la restricción de unicidad solo se puede añadir después de haber limpiado los duplicados existentes —si intentás ponerla con duplicados presentes, la base la rechaza porque ya hay filas que la violan—. Por eso el orden es: primero limpiar, luego proteger. En cuanto a las precauciones del borrado, no son opcionales: un DELETE es destructivo y difícil de deshacer, así que la copia de seguridad previa y el SELECT de prueba son lo que separa una limpieza exitosa de un desastre irreversible. La disciplina de «copia, comprueba con SELECT, borra en transacción» debe aplicarse siempre que se borren datos, no solo con duplicados.

Errores frecuentes

  • Borrar sin definir qué es un duplicado. Sin saber por qué columnas, se borra de más o de menos; definirlo primero.
  • Asumir que duplicado es fila idéntica. A veces basta con coincidir en las columnas de identidad, aunque otras difieran.
  • Ejecutar el DELETE sin copia previa. Un borrado mal hecho es irreversible; respaldar siempre antes.
  • No probar con SELECT. Ver qué se borraría antes de borrarlo evita eliminar lo que no era.
  • Borrar todas las filas del grupo en vez de dejar una. El objetivo es conservar un registro por grupo, no eliminarlos todos.
  • No prevenir con una restricción. Sin clave única, los duplicados vuelven a entrar.
  • Intentar poner la restricción antes de limpiar. La base la rechaza si hay duplicados; primero limpiar, luego proteger.

Preguntas frecuentes

¿Por qué hay que definir primero qué es un duplicado?

Hay que definir primero qué es un duplicado porque sin esa definición no se puede detectar ni eliminar correctamente los duplicados, y porque un duplicado no siempre es una fila idéntica en todas sus columnas, sino que a menudo son filas que representan el mismo elemento aunque difieran en algunos datos. Este es el paso que la mayoría de la gente se salta al abordar la tarea de eliminar duplicados, y su omisión es la causa de muchos errores, ya que lleva a borrar de más, perdiendo datos legítimos, o a borrar de menos, dejando duplicados sin limpiar. El error de principiante consiste en asumir que un duplicado es siempre una fila exactamente igual a otra en todas sus columnas. A veces es así, pero en muchos casos no lo es, porque dos registros pueden ser el mismo desde el punto de vista del negocio o de la realidad que representan, aunque difieran en algunas columnas. Por ejemplo, dos filas de una tabla de clientes que tienen el mismo correo electrónico probablemente corresponden a la misma persona, aunque tengan distinta fecha de alta o distinto identificador interno. En ese caso, considerarlas duplicados exige mirar solo la columna del correo y no todas las columnas. Definir un duplicado consiste, por tanto, en decidir cuáles son las columnas que determinan que dos filas son la misma cosa, es decir, las columnas que definen la identidad del registro para el caso concreto. La pregunta que hay que hacerse es qué combinación de columnas, si se repite, significa que se trata del mismo elemento del mundo real. Para una tabla de clientes podría ser el documento de identidad o el correo; para una tabla de productos, el código de referencia; y para otro tipo de datos, otra combinación de columnas. Esas columnas de identidad son las que luego se utilizan para agrupar los registros al detectar los duplicados. Es importante tener en cuenta que una misma tabla puede tener definiciones distintas de duplicado según el objetivo que se persiga, ya que en unos casos se querrán eliminar filas exactamente iguales y en otros unificar registros que representan la misma entidad aunque tengan detalles distintos. Por todo ello, tener clara esta definición antes de escribir cualquier instrucción de SQL es fundamental, ya que orienta toda la operación de detección y borrado y evita tanto la pérdida de datos legítimos como el hecho de dejar duplicados sin limpiar.

¿Cómo detecto los registros duplicados con SQL?

Los registros duplicados se detectan con SQL mediante la combinación de la agrupación y el conteo, agrupando las filas por las columnas que definen el duplicado y contando cuántas filas hay en cada grupo, de modo que los grupos con más de una fila son los duplicados. La herramienta central para esta detección es la cláusula de agrupación, que agrupa las filas de una tabla según los valores de una o varias columnas, combinada con la función de conteo, que cuenta cuántas filas hay en cada grupo. La idea es agrupar por las columnas que se han definido como aquellas que determinan la identidad del registro, es decir, las que definen qué es un duplicado, y contar cuántas filas caen en cada grupo. Un grupo que contiene una sola fila corresponde a un valor único, que aparece una única vez, mientras que un grupo que contiene dos o más filas corresponde a un duplicado, ya que esa combinación de valores se repite. Para quedarse únicamente con los grupos que representan duplicados, se utiliza la cláusula que filtra los grupos según una condición sobre el resultado de la agregación, indicando que solo interesan los grupos cuyo conteo es mayor que uno. De este modo, la consulta devuelve exactamente las combinaciones de valores que están duplicadas, junto con el número de veces que aparece cada una, lo que proporciona una lista precisa de los duplicados existentes en la tabla. Por ejemplo, si en una tabla de clientes se ha definido que el duplicado se determina por el correo electrónico, se agruparía por la columna del correo, se contarían las filas de cada grupo y se filtrarían los grupos con más de una fila, obteniendo así la lista de correos que aparecen repetidos y cuántas veces lo hacen. Esta consulta de detección es muy valiosa no solo para identificar los duplicados, sino también como paso previo a su eliminación, ya que permite conocer el alcance del problema antes de actuar. Una vez detectados los duplicados de esta manera, el siguiente paso consiste en decidir cuál de las filas de cada grupo se conserva y borrar las demás, pero siempre después de haber comprobado con una consulta de selección exactamente qué filas se van a eliminar y de haber hecho una copia de seguridad, dada la naturaleza destructiva del borrado. La técnica de agrupar y contar para detectar duplicados es sencilla, potente y aplicable en cualquier motor de base de datos, y constituye la base de toda operación de limpieza de duplicados.

¿Cómo borro los duplicados conservando uno de cada grupo?

Para borrar los duplicados conservando uno de cada grupo se utiliza una instrucción de borrado que elimine todas las filas duplicadas excepto la que se decide conservar en cada grupo, para lo cual primero hay que elegir un criterio que determine cuál se conserva, siendo lo más habitual quedarse con la fila de menor identificador de cada grupo, que suele ser la más antigua u original. La lógica de esta operación es quedarse con una fila representante de cada grupo de duplicados y borrar el resto. El primer paso es decidir cuál de las filas de cada grupo se conserva, lo que requiere un criterio claro. El criterio más común es conservar la fila de menor identificador de cada grupo, ya que en las tablas con un identificador que se asigna de forma creciente, el menor identificador corresponde normalmente a la fila que se creó primero, es decir, al registro original, mientras que los de mayor identificador son las inserciones posteriores duplicadas. También se podría usar otro criterio según el caso, como conservar la fila más reciente o la que tenga ciertos datos más completos, pero conservar la de menor identificador es lo habitual y sencillo. Una vez elegido el criterio, el borrado consiste en eliminar todas las filas que no sean la que se conserva en cada grupo. Una forma habitual de expresarlo es mediante una subconsulta que obtenga, para cada grupo definido por las columnas de identidad, el identificador mínimo, y luego borrar todas las filas cuyo identificador no esté entre esos identificadores mínimos, con lo que se eliminan todos los duplicados dejando uno por grupo. La técnica concreta puede variar según el motor de base de datos, ya que algunos permiten usar funciones de ventana que numeran las filas dentro de cada grupo, de modo que se conservan las que tienen el número uno y se borran las que tienen un número mayor, y otros se apoyan en subconsultas o en tablas auxiliares, pero la lógica subyacente es siempre la misma, que es identificar los grupos y quedarse con una fila de cada uno. Es absolutamente imprescindible seguir dos precauciones antes de ejecutar el borrado: hacer una copia de seguridad de la tabla o la base de datos, ya que un borrado mal hecho es difícil o imposible de deshacer, y probar primero con una consulta de selección que muestre exactamente qué filas se eliminarían, ejecutando la selección antes de convertirla en el borrado, para confirmar que se van a eliminar las filas correctas y no otras. Realizar el borrado dentro de una transacción también permite revertirlo si el resultado no es el esperado antes de confirmarlo.

¿Por qué es imprescindible hacer copia y probar con SELECT antes de borrar?

Es imprescindible hacer una copia de seguridad y probar primero con una consulta de selección antes de ejecutar un borrado de duplicados porque el borrado es una operación destructiva y difícil o imposible de deshacer, de modo que un error puede provocar la pérdida irreversible de datos legítimos, y estas dos precauciones son lo que separa una limpieza exitosa de un desastre. La primera precaución, hacer una copia de seguridad antes de cualquier borrado, se debe a que una instrucción de borrado elimina las filas de forma permanente, y si por un error en la definición del duplicado, en el criterio de conservación o en la propia instrucción se borran filas que no debían borrarse, recuperarlas puede ser muy complicado o directamente imposible si no se dispone de una copia. Con una copia de seguridad previa, en cambio, siempre existe la posibilidad de restaurar la tabla o la base de datos al estado anterior al borrado si algo sale mal, lo que convierte un posible desastre irreversible en un contratiempo recuperable. Por ello, respaldar antes de borrar no es opcional, sino una regla que debe aplicarse siempre que se vayan a eliminar datos. La segunda precaución, probar primero con una consulta de selección, consiste en escribir la misma condición que usaría el borrado pero en forma de consulta de selección, de modo que en lugar de eliminar las filas, se muestren, permitiendo ver exactamente qué filas se eliminarían si se ejecutara el borrado. Esto es fundamental porque permite verificar, antes de causar ningún daño, que la condición selecciona precisamente las filas duplicadas que se quieren eliminar y no otras que deberían conservarse. Si al ejecutar la selección se observa que las filas mostradas son las correctas, se puede proceder con confianza a convertir la selección en un borrado; pero si se observa que la selección incluye filas que no deberían borrarse o que no incluye las que sí, se corrige la condición antes de ejecutar el borrado, evitando así el error. Una tercera práctica muy recomendable es realizar el borrado dentro de una transacción, lo que permite revisar el resultado y revertir la operación si no es el esperado antes de confirmarla definitivamente. En conjunto, la disciplina de hacer copia de seguridad, comprobar con una consulta de selección qué se va a borrar, y ejecutar el borrado dentro de una transacción, proporciona varias capas de protección frente a errores, y debe aplicarse siempre al eliminar duplicados o cualquier otro dato, dada la naturaleza destructiva e irreversible del borrado en las bases de datos.

¿Cómo evito que vuelvan a aparecer duplicados?

Para evitar que vuelvan a aparecer duplicados una vez limpiados, la solución de fondo es añadir a la tabla una restricción de unicidad sobre las columnas que definen el duplicado, de modo que la base de datos rechace automáticamente cualquier intento de insertar una nueva fila que repita esa combinación de valores. Limpiar los duplicados existentes resuelve el problema en el momento presente, pero si la causa que los generó sigue ahí, por ejemplo una aplicación que permite registrar dos veces al mismo cliente, los duplicados volverán a aparecer con el tiempo, por lo que la limpieza puntual no es una solución definitiva. La forma de impedir que los duplicados vuelvan a entrar es hacer que sea la propia base de datos la que los rechace por diseño, mediante una restricción de unicidad, que es una regla que se aplica sobre una o varias columnas y que garantiza que no puedan existir dos filas con la misma combinación de valores en esas columnas. Al poner una restricción de unicidad sobre las columnas que definen el duplicado, cualquier intento de insertar una fila que repita esa combinación es rechazado automáticamente por la base de datos, que devuelve un error e impide la inserción, de manera que los duplicados no pueden entrar. Esta protección es muy robusta porque actúa a nivel de la base de datos, con independencia de qué aplicación o persona intente insertar los datos, garantizando la unicidad en todos los casos. Existe un detalle importante en el orden de las operaciones: la restricción de unicidad solo se puede añadir después de haber limpiado los duplicados existentes, ya que si se intenta poner la restricción cuando todavía hay duplicados en la tabla, la base de datos la rechaza, porque hay filas que ya violan la regla que se pretende imponer. Por ello, el orden correcto es primero limpiar los duplicados y luego, una vez que la tabla está limpia, añadir la restricción de unicidad para protegerla de futuros duplicados. De este modo, el ciclo completo de tratamiento de los duplicados consta de tres fases: detectar los duplicados mediante la agrupación y el conteo, eliminarlos con las debidas precauciones de copia de seguridad y comprobación previa, y prevenir su reaparición mediante una restricción de unicidad. Esta última fase es la que convierte una limpieza puntual en una solución duradera, ya que impide que el problema se reproduzca. Conviene además, si es posible, corregir también en la aplicación o en el proceso que generaba los duplicados la lógica que permitía crearlos, para atacar el problema en su origen, aunque la restricción de unicidad en la base de datos actúa como una salvaguarda definitiva que garantiza la integridad de los datos aunque falle esa lógica.

¿Qué es un duplicado exacto y uno parcial?

Un duplicado exacto es una fila que es idéntica a otra en todas sus columnas, mientras que un duplicado parcial es una fila que coincide con otra solo en las columnas que definen la identidad del registro, aunque difiera en otras columnas, y distinguir entre ambos tipos es importante porque determina cómo se detectan y se eliminan. Un duplicado exacto se da cuando dos o más filas de una tabla tienen exactamente los mismos valores en todas y cada una de sus columnas, siendo por tanto copias perfectas unas de otras. Este tipo de duplicado suele surgir por errores como la ejecución repetida de una misma inserción o la importación duplicada de los mismos datos, y su detección y eliminación son relativamente directas, ya que basta con agrupar por todas las columnas y detectar los grupos con más de una fila. Un duplicado parcial, en cambio, se da cuando dos o más filas representan el mismo elemento del mundo real y coinciden en las columnas que determinan su identidad, pero difieren en otras columnas. Por ejemplo, en una tabla de clientes, dos filas con el mismo correo electrónico o el mismo documento de identidad corresponden probablemente a la misma persona, y por tanto son duplicados desde el punto de vista del negocio, aunque puedan tener distinta fecha de alta, distinto identificador interno u otros datos diferentes. Este tipo de duplicado es más sutil y frecuente de lo que parece, y su tratamiento requiere haber definido previamente cuáles son las columnas que determinan la identidad del registro, es decir, por qué columnas se considera que dos filas son la misma cosa, para poder agrupar por ellas y no por todas las columnas. La distinción entre ambos tipos tiene consecuencias prácticas importantes. En el caso de los duplicados exactos, la definición de duplicado es simple, ya que son filas idénticas, y la eliminación no plantea la duda de cuál conservar porque todas son iguales. En el caso de los duplicados parciales, hay que decidir cuidadosamente por qué columnas se agrupa para detectarlos y, además, cuál de las filas de cada grupo se conserva, ya que al diferir en algunas columnas, la elección de cuál mantener puede implicar conservar unos datos u otros. Por ello, ante una tarea de eliminación de duplicados, es fundamental determinar primero de qué tipo de duplicado se trata y, en el caso de los parciales, definir con precisión las columnas de identidad, porque una definición incorrecta llevaría a no detectar duplicados que sí lo son o a considerar duplicados registros que en realidad son distintos. Comprender esta diferencia entre duplicados exactos y parciales es, en definitiva, parte esencial del paso previo de definir qué es un duplicado, que condiciona todo el proceso posterior de detección y eliminación.

Fuentes

Documentación oficial y material de la comunidad consultados para esta guía. Fecha de consulta: 28 de julio de 2026.

Aportes de la comunidad Underc0de

  1. Underc0de, foro. Bases de datos. SQL y limpieza de datos.
  2. Underc0de, blog. Blog de Underc0de. Calidad de los datos.

Documentación oficial

  1. PostgreSQL. DELETE. Borrado de filas.
  2. Oracle (MySQL). GROUP BY y agregación. Agrupación y conteo.
  3. ISO/IEC. SQL Standard. El estándar del lenguaje SQL.
  4. SQLite. DELETE. Borrado en SQLite.