🧚 ¡Escucha! Beekeeper Studio es una GUI de base de datos rápida, moderna y de código abierto Descargar
January 9, 2026 Por Matthew Rathbone

Encontrar duplicados en SQL puede ser una tarea tediosa, pero es una habilidad esencial para cualquier persona que trabaje con bases de datos. Los duplicados pueden causar errores, discrepancias e inconsistencias en tus datos, lo que lleva a resultados incorrectos y bajo rendimiento. Por lo tanto, es crucial identificar y eliminar los duplicados de tus tablas para garantizar la integridad y precisión de los datos.

SQL proporciona varias formas de encontrar duplicados en tus datos, dependiendo de tus requisitos y la estructura de tus tablas. Puedes usar las cláusulas GROUP BY y HAVING para agrupar registros por una columna particular y filtrar duplicados basándote en un conteo o condición. Alternativamente, puedes usar la palabra clave DISTINCT para seleccionar solo valores únicos y compararlos con la tabla original para identificar duplicados. También hay funciones y operadores especializados, como COUNT(), EXISTS y JOIN, que pueden ayudarte a encontrar duplicados en escenarios más complejos.

A lo largo de esta guía, encontrarás ejercicios SQL interactivos que te permiten practicar la búsqueda de duplicados en tu navegador, sin necesidad de configurar una base de datos. Escribe consultas, obtén retroalimentación instantánea y comprueba si tus resultados coinciden con la salida esperada.

En este artículo, exploraremos varias técnicas para encontrar duplicados en SQL, desde consultas simples hasta métodos avanzados, y proporcionaremos ejemplos y mejores prácticas para ayudarte a dominar esta habilidad. Ya seas principiante o desarrollador SQL experimentado, esta guía te ayudará a mejorar la calidad y eficiencia de tus datos detectando y eliminando duplicados de tus tablas. Para practicar estas consultas, considera usar un editor SQL moderno como el editor SQL de Beekeeper Studio, que proporciona resaltado de sintaxis y funciones de autocompletado.

Encontrando Duplicados Usando las Cláusulas GROUP BY y HAVING

Una forma de encontrar valores duplicados en SQL es usando las cláusulas GROUP BY y HAVING. Estas cláusulas te permiten agrupar filas que tienen los mismos valores en una o más columnas y luego filtrar los grupos basándote en ciertos criterios. Así es como funciona:

  1. Comienza seleccionando las columnas que deseas verificar por duplicados usando la instrucción SELECT.
  2. Usa la cláusula GROUP BY para agrupar las filas por las columnas seleccionadas.
  3. Usa la función COUNT en la cláusula HAVING para filtrar los grupos que tienen más de una fila. Estos son los grupos que contienen duplicados.

Por ejemplo, supongamos que tienes una tabla llamada “customers” con columnas para “name” y “email”. Quieres encontrar todos los clientes que se han registrado con la misma dirección de correo electrónico. Así sería la consulta SQL:

SELECT name, email, COUNT(*)
FROM customers
GROUP BY email
HAVING COUNT(*) > 1;

Esta consulta agrupa a los clientes por sus direcciones de correo electrónico y luego cuenta el número de clientes en cada grupo. La cláusula HAVING filtra los grupos que tienen solo un cliente, dejando solo los grupos con direcciones de correo duplicadas.

Pruébalo tú mismo:

[[ expanded ? '▼' : '▶' ]]

[[ testData.title ]]

Consulta la tabla users para encontrar todas las direcciones de correo electrónico que aparecen más de una vez. Devuelve el email y el count de cuántas veces aparece cada correo duplicado.

Ejemplo Interactivo ✓ Completado
Columnas esperadas: [[ col ]]
ℹ️ Este ejercicio reinicia la base de datos en cada ejecución. Escribe tu solución completa en un solo envío.
[[ i18n.correct ]] [[ validationResult ? i18n.all_checks_passed : i18n.query_success ]]
[[ detail.message ]]
[[ col ]]
[[ formatCell(cell) ]]
[[ i18n.not_quite_right ]] [[ patternError ]] [[ validationResult.error ]] [[ i18n.results_dont_match ]]
[[ detail.passed ? '✓' : '✗' ]] [[ detail.message ]]
[[ i18n.your_results ]]
[[ col ]]
[[ formatCell(cell) ]]
[[ i18n.expected_results ]]
[[ col ]]
[[ formatCell(cell) ]]
[[ i18n.sql_error ]]
[[ error ]]
💡 [[ i18n.hint_label ]] [[ testData.hint ]]
📊 [[ i18n.expected_result_label ]]
[[ col ]]
[[ formatCell(cell) ]]
✨ [[ i18n.solution_label ]]
[[ testData.solution ]]
Tablas Disponibles
[[ table.name ]]
[[ col ]]
[[ formatCell(cell) ]]

Es importante notar que la cláusula GROUP BY debe incluir todas las columnas que estás seleccionando excepto las que usan una función agregada como COUNT. De lo contrario, la consulta devolverá un error.

Otra cosa a tener en cuenta es que la función COUNT cuenta todas las filas en cada grupo, no solo las únicas. Entonces, si tienes múltiples filas con el mismo nombre y dirección de correo electrónico, todas serán contadas como duplicados.

Además de usar las cláusulas GROUP BY y HAVING, también puedes usar otras instrucciones SQL como ORDER BY, WHERE y JOIN para refinar aún más tu búsqueda de duplicados. También puedes usar restricciones únicas para evitar que se inserten valores duplicados en una tabla en primer lugar.

En general, encontrar duplicados en SQL puede ser una herramienta poderosa para limpiar datos sin procesar o identificar posibles errores humanos o bugs de aplicación. Usando los criterios de búsqueda correctos y presentando los resultados de manera clara y concisa, puedes identificar rápidamente filas o valores duplicados y tomar medidas para corregirlos.

Usando la Función COUNT

Una forma de encontrar duplicados en SQL es usando la función COUNT. La función COUNT es una función agregada que cuenta el número de filas en una tabla que cumplen una determinada condición. Al usar la función COUNT, puedes contar el número de ocurrencias de un valor particular en una columna e identificar duplicados.

Para usar la función COUNT para encontrar duplicados, necesitarás agrupar las filas por la columna que deseas verificar por duplicados. La cláusula GROUP BY se usa para agrupar las filas basándose en los valores de una columna específica. Por ejemplo, si quieres encontrar duplicados en la columna “email” de una tabla “users”, agruparías las filas por la columna “email”.

Aquí hay un ejemplo de consulta que usa la función COUNT para encontrar duplicados en la columna “email” de una tabla “users”:

SELECT email, COUNT(email) as count
FROM users
GROUP BY email
HAVING COUNT(email) > 1;

En esta consulta, la cláusula GROUP BY agrupa las filas por la columna “email”, y la función COUNT cuenta el número de ocurrencias de cada dirección de correo electrónico. La cláusula HAVING filtra los resultados para mostrar solo las direcciones de correo que tienen más de una ocurrencia.

El resultado de esta consulta será una tabla que muestra las direcciones de correo que tienen duplicados y el número de ocurrencias de cada dirección de correo. Puedes usar esta información para identificar y eliminar las filas duplicadas de la tabla.

Usar la función COUNT es una forma simple y efectiva de encontrar duplicados en SQL. Te permite identificar rápidamente los valores duplicados en una columna y tomar medidas para eliminarlos de la tabla.

Usando la Cláusula INNER JOIN

Una de las formas más comunes de encontrar duplicados en SQL es usando la cláusula INNER JOIN. Esta cláusula te permite combinar dos o más tablas basándote en una columna común y devolver solo las filas que tienen valores coincidentes en ambas tablas.

Para usar la cláusula INNER JOIN para encontrar duplicados, necesitarás identificar las columnas que contienen los datos duplicados. Una vez que hayas identificado estas columnas, puedes usar la cláusula INNER JOIN para unir la tabla en estas columnas.

Aquí hay un ejemplo de cómo usar la cláusula INNER JOIN para encontrar duplicados en una tabla llamada “orders”:

SELECT o1.order_id, o2.order_id
FROM orders o1
INNER JOIN orders o2
ON o1.customer_id = o2.customer_id
AND o1.order_date = o2.order_date
AND o1.order_id <> o2.order_id;

En este ejemplo, la cláusula INNER JOIN se usa para unir la tabla “orders” consigo misma, usando las columnas “customer_id” y “order_date” como criterios de unión. El operador “AND” se usa para especificar que las tres columnas deben coincidir para que se devuelva una fila. La línea final de la consulta, “AND o1.order_id <> o2.order_id”, asegura que la consulta no devuelva filas donde ambos valores de “order_id” sean iguales.

El resultado de esta consulta será una lista de todos los pedidos que tienen el mismo ID de cliente y fecha de pedido, pero diferentes IDs de pedido. Estos son los pedidos duplicados que necesitan ser investigados más a fondo.

Practica con self-joins:

[[ expanded ? '▼' : '▶' ]]

[[ testData.title ]]

Consulta la tabla products para encontrar todos los registros de productos duplicados (mismo product_name y category). Devuelve el product_id, product_name, category y price solo de los registros duplicados (no la primera ocurrencia).

Ejemplo Interactivo ✓ Completado
Columnas esperadas: [[ col ]]
ℹ️ Este ejercicio reinicia la base de datos en cada ejecución. Escribe tu solución completa en un solo envío.
[[ i18n.correct ]] [[ validationResult ? i18n.all_checks_passed : i18n.query_success ]]
[[ detail.message ]]
[[ col ]]
[[ formatCell(cell) ]]
[[ i18n.not_quite_right ]] [[ patternError ]] [[ validationResult.error ]] [[ i18n.results_dont_match ]]
[[ detail.passed ? '✓' : '✗' ]] [[ detail.message ]]
[[ i18n.your_results ]]
[[ col ]]
[[ formatCell(cell) ]]
[[ i18n.expected_results ]]
[[ col ]]
[[ formatCell(cell) ]]
[[ i18n.sql_error ]]
[[ error ]]
💡 [[ i18n.hint_label ]] [[ testData.hint ]]
📊 [[ i18n.expected_result_label ]]
[[ col ]]
[[ formatCell(cell) ]]
✨ [[ i18n.solution_label ]]
[[ testData.solution ]]
Tablas Disponibles
[[ table.name ]]
[[ col ]]
[[ formatCell(cell) ]]

Usar la cláusula INNER JOIN de esta manera puede ser una herramienta poderosa para encontrar duplicados en SQL. Sin embargo, es importante tener cuidado al usar este método, ya que puede ser fácil devolver accidentalmente falsos positivos o perder duplicados que están distribuidos en múltiples tablas. Siempre es una buena idea verificar dos veces tus resultados y usar otros métodos, como las cláusulas GROUP BY y HAVING, para confirmar tus hallazgos.

Pruébalo tú mismo:

[[ expanded ? '▼' : '▶' ]]

[[ testData.title ]]

Consulta la tabla customers para devolver los registros completos de clientes (name y email) cuyos correos aparecen más de una vez. Usa una subconsulta para identificar correos duplicados.

Ejemplo Interactivo ✓ Completado
Columnas esperadas: [[ col ]]
ℹ️ Este ejercicio reinicia la base de datos en cada ejecución. Escribe tu solución completa en un solo envío.
[[ i18n.correct ]] [[ validationResult ? i18n.all_checks_passed : i18n.query_success ]]
[[ detail.message ]]
[[ col ]]
[[ formatCell(cell) ]]
[[ i18n.not_quite_right ]] [[ patternError ]] [[ validationResult.error ]] [[ i18n.results_dont_match ]]
[[ detail.passed ? '✓' : '✗' ]] [[ detail.message ]]
[[ i18n.your_results ]]
[[ col ]]
[[ formatCell(cell) ]]
[[ i18n.expected_results ]]
[[ col ]]
[[ formatCell(cell) ]]
[[ i18n.sql_error ]]
[[ error ]]
💡 [[ i18n.hint_label ]] [[ testData.hint ]]
📊 [[ i18n.expected_result_label ]]
[[ col ]]
[[ formatCell(cell) ]]
✨ [[ i18n.solution_label ]]
[[ testData.solution ]]
Tablas Disponibles
[[ table.name ]]
[[ col ]]
[[ formatCell(cell) ]]

Encontrando Pares Duplicados Usando Self-Joins

Otra técnica poderosa para encontrar duplicados es usar self-joins para identificar pares de registros que comparten características comunes. Este enfoque es particularmente útil cuando quieres encontrar pares duplicados exactos en lugar de solo identificar que existen duplicados.

Un self-join implica unir una tabla consigo misma usando diferentes alias. Al unir en las columnas que definen duplicados y asegurarte de que no emparejas un registro consigo mismo, puedes identificar pares duplicados de manera efectiva.

Por ejemplo, si tienes una tabla de transacciones y quieres encontrar pares de transacciones con el mismo ID de cliente y monto pero diferentes IDs de transacción, puedes usar un self-join así:

SELECT t1.transaction_id as transaction_id1, 
       t2.transaction_id as transaction_id2, 
       t1.customer_id, 
       t1.amount
FROM transactions t1
INNER JOIN transactions t2 
ON t1.customer_id = t2.customer_id 
AND t1.amount = t2.amount 
AND t1.transaction_id < t2.transaction_id;

Los puntos clave en esta consulta son:

  • t1 y t2 son alias para la misma tabla
  • Las condiciones de unión especifican qué hace que los registros sean “duplicados” (customer_id y amount)
  • t1.transaction_id < t2.transaction_id asegura que obtenemos cada par solo una vez y no emparejamos un registro consigo mismo

Pruébalo tú mismo:

[[ expanded ? '▼' : '▶' ]]

[[ testData.title ]]

Consulta la tabla transactions para encontrar pares de transacciones que tienen el mismo customer_id y amount pero diferente transaction_id. Devuelve transaction_id1, transaction_id2, customer_id y amount para cada par duplicado. Solo muestra cada par una vez (evita mostrar tanto A-B como B-A).

Ejemplo Interactivo ✓ Completado
Columnas esperadas: [[ col ]]
ℹ️ Este ejercicio reinicia la base de datos en cada ejecución. Escribe tu solución completa en un solo envío.
[[ i18n.correct ]] [[ validationResult ? i18n.all_checks_passed : i18n.query_success ]]
[[ detail.message ]]
[[ col ]]
[[ formatCell(cell) ]]
[[ i18n.not_quite_right ]] [[ patternError ]] [[ validationResult.error ]] [[ i18n.results_dont_match ]]
[[ detail.passed ? '✓' : '✗' ]] [[ detail.message ]]
[[ i18n.your_results ]]
[[ col ]]
[[ formatCell(cell) ]]
[[ i18n.expected_results ]]
[[ col ]]
[[ formatCell(cell) ]]
[[ i18n.sql_error ]]
[[ error ]]
💡 [[ i18n.hint_label ]] [[ testData.hint ]]
📊 [[ i18n.expected_result_label ]]
[[ col ]]
[[ formatCell(cell) ]]
✨ [[ i18n.solution_label ]]
[[ testData.solution ]]
Tablas Disponibles
[[ table.name ]]
[[ col ]]
[[ formatCell(cell) ]]

Encontrando Duplicados Usando Common Table Expressions (CTE)

Una de las formas de encontrar duplicados en SQL es usando Common Table Expressions (CTE). Una CTE es un conjunto de resultados temporal que se define dentro del alcance de ejecución de una sola instrucción SELECT, INSERT, UPDATE, DELETE o CREATE VIEW.

Para encontrar duplicados usando CTE, se puede usar la función ROW_NUMBER(), que asigna un número secuencial único a cada fila dentro de una partición de un conjunto de resultados. La cláusula PARTITION BY especifica las columnas usadas para definir la partición, y la cláusula ORDER BY especifica el orden de las filas dentro de cada partición.

Aquí hay un ejemplo de uso de CTE para encontrar duplicados:

WITH CTE AS (
   SELECT column1, column2, column3, ROW_NUMBER() OVER(PARTITION BY column1, column2, column3 ORDER BY column1, column2, column3) AS RowNumber
   FROM table_name
)
SELECT *
FROM CTE
WHERE RowNumber > 1

En este ejemplo, la CTE se define con las columnas a verificar por duplicados. La función ROW_NUMBER() se usa para generar un número de secuencia para cada fila dentro de una partición del conjunto de resultados, donde la partición se define por las columnas especificadas en la cláusula PARTITION BY. El conjunto de resultados se filtra luego para mostrar solo las filas donde el RowNumber es mayor que 1, indicando que hay duplicados.

Es importante notar que la cláusula ORDER BY dentro de la función ROW_NUMBER() debe coincidir con la cláusula ORDER BY en la instrucción SELECT principal, o de lo contrario los resultados pueden no ser precisos.

Usar CTE para encontrar duplicados puede ser especialmente útil en SQL Server 2017, que introdujo soporte para procesamiento de grafos usando Common Table Expressions. Esto permite consultas más complejas que involucran relaciones entre datos.

En general, usar CTE para encontrar duplicados en SQL puede ser una herramienta poderosa para el análisis y gestión de datos.

Pruébalo tú mismo:

[[ expanded ? '▼' : '▶' ]]

[[ testData.title ]]

Consulta la tabla products usando una Common Table Expression (CTE) para encontrar nombres de productos duplicados. La CTE debe agrupar por nombre de producto y contar ocurrencias, luego seleccionar productos con conteo > 1.

Ejemplo Interactivo ✓ Completado
Columnas esperadas: [[ col ]]
ℹ️ Este ejercicio reinicia la base de datos en cada ejecución. Escribe tu solución completa en un solo envío.
[[ i18n.correct ]] [[ validationResult ? i18n.all_checks_passed : i18n.query_success ]]
[[ detail.message ]]
[[ col ]]
[[ formatCell(cell) ]]
[[ i18n.not_quite_right ]] [[ patternError ]] [[ validationResult.error ]] [[ i18n.results_dont_match ]]
[[ detail.passed ? '✓' : '✗' ]] [[ detail.message ]]
[[ i18n.your_results ]]
[[ col ]]
[[ formatCell(cell) ]]
[[ i18n.expected_results ]]
[[ col ]]
[[ formatCell(cell) ]]
[[ i18n.sql_error ]]
[[ error ]]
💡 [[ i18n.hint_label ]] [[ testData.hint ]]
📊 [[ i18n.expected_result_label ]]
[[ col ]]
[[ formatCell(cell) ]]
✨ [[ i18n.solution_label ]]
[[ testData.solution ]]
Tablas Disponibles
[[ table.name ]]
[[ col ]]
[[ formatCell(cell) ]]

Encontrando Duplicados Usando Funciones de Ventana

Cuando se trata de encontrar duplicados en SQL, una de las formas más eficientes es usando funciones de ventana. Las funciones de ventana son una herramienta poderosa que se puede usar para realizar cálculos a través de un conjunto de filas que están relacionadas con la fila actual.

Para encontrar duplicados usando funciones de ventana, puedes usar la función ROW_NUMBER() en combinación con una cláusula PARTITION BY. La función ROW_NUMBER() asigna un número único a cada fila dentro de una partición, y la cláusula PARTITION BY agrupa filas en particiones basándose en una columna específica o conjunto de columnas.

Por ejemplo, supongamos que tienes una tabla de usuarios que incluye columnas para user_id, username y email. Para encontrar todos los usuarios que tienen correos electrónicos duplicados, puedes usar la siguiente instrucción select:

SELECT user_id, username, email
FROM (
  SELECT user_id, username, email,
    ROW_NUMBER() OVER (PARTITION BY email ORDER BY user_id) AS row_num
  FROM users
) AS subquery
WHERE row_num > 1;

En este ejemplo, la cláusula PARTITION BY particiona las filas por la columna email, y la función ROW_NUMBER() asigna un número único a cada fila dentro de la partición basándose en la columna user_id. La cláusula WHERE filtra todas las filas excepto aquellas con un row_num mayor que 1, que son las filas con correos electrónicos duplicados.

Practica con ROW_NUMBER():

[[ expanded ? '▼' : '▶' ]]

[[ testData.title ]]

Consulta la tabla customers para devolver los registros completos de clientes (name y email) cuyos correos aparecen más de una vez. Usa una subconsulta para identificar correos duplicados.

Ejemplo Interactivo ✓ Completado
Columnas esperadas: [[ col ]]
ℹ️ Este ejercicio reinicia la base de datos en cada ejecución. Escribe tu solución completa en un solo envío.
[[ i18n.correct ]] [[ validationResult ? i18n.all_checks_passed : i18n.query_success ]]
[[ detail.message ]]
[[ col ]]
[[ formatCell(cell) ]]
[[ i18n.not_quite_right ]] [[ patternError ]] [[ validationResult.error ]] [[ i18n.results_dont_match ]]
[[ detail.passed ? '✓' : '✗' ]] [[ detail.message ]]
[[ i18n.your_results ]]
[[ col ]]
[[ formatCell(cell) ]]
[[ i18n.expected_results ]]
[[ col ]]
[[ formatCell(cell) ]]
[[ i18n.sql_error ]]
[[ error ]]
💡 [[ i18n.hint_label ]] [[ testData.hint ]]
📊 [[ i18n.expected_result_label ]]
[[ col ]]
[[ formatCell(cell) ]]
✨ [[ i18n.solution_label ]]
[[ testData.solution ]]
Tablas Disponibles
[[ table.name ]]
[[ col ]]
[[ formatCell(cell) ]]

Es importante notar que las funciones de ventana se pueden usar en combinación con otras funciones SQL, como instrucciones CASE y funciones agregadas, para crear consultas más complejas. Por ejemplo, podrías usar una instrucción CASE para agrupar filas en una categoría específica y luego usar una función de ventana para encontrar duplicados dentro de esa categoría.

En conclusión, usar funciones de ventana para encontrar duplicados en SQL puede ser un método poderoso y eficiente. Al usar la función ROW_NUMBER() en combinación con una cláusula PARTITION BY, puedes agrupar fácilmente filas en particiones y asignar números únicos a cada fila dentro de la partición. Esto te permite identificar y eliminar rápidamente filas duplicadas de tus resultados.

Pruébalo tú mismo:

[[ expanded ? '▼' : '▶' ]]

[[ testData.title ]]

Consulta la tabla products para encontrar todos los registros de productos duplicados (mismo product_name y category). Devuelve el product_id, product_name, category y price solo de los registros duplicados (no la primera ocurrencia).

Ejemplo Interactivo ✓ Completado
Columnas esperadas: [[ col ]]
ℹ️ Este ejercicio reinicia la base de datos en cada ejecución. Escribe tu solución completa en un solo envío.
[[ i18n.correct ]] [[ validationResult ? i18n.all_checks_passed : i18n.query_success ]]
[[ detail.message ]]
[[ col ]]
[[ formatCell(cell) ]]
[[ i18n.not_quite_right ]] [[ patternError ]] [[ validationResult.error ]] [[ i18n.results_dont_match ]]
[[ detail.passed ? '✓' : '✗' ]] [[ detail.message ]]
[[ i18n.your_results ]]
[[ col ]]
[[ formatCell(cell) ]]
[[ i18n.expected_results ]]
[[ col ]]
[[ formatCell(cell) ]]
[[ i18n.sql_error ]]
[[ error ]]
💡 [[ i18n.hint_label ]] [[ testData.hint ]]
📊 [[ i18n.expected_result_label ]]
[[ col ]]
[[ formatCell(cell) ]]
✨ [[ i18n.solution_label ]]
[[ testData.solution ]]
Tablas Disponibles
[[ table.name ]]
[[ col ]]
[[ formatCell(cell) ]]

Usando la Función ROW_NUMBER() con Cláusula PARTITION BY

Al buscar duplicados en una base de datos SQL, una herramienta útil es la función ROW_NUMBER() con la cláusula PARTITION BY. Esta función asigna un número único a cada fila en un conjunto de resultados, basándose en los criterios de particionamiento especificados.

La cláusula PARTITION BY permite al usuario agrupar las filas en particiones basándose en una o más columnas. Esto significa que la función ROW_NUMBER() asignará un número único a cada fila dentro de cada partición, en lugar de a través de todo el conjunto de resultados.

Por ejemplo, considera una tabla de pedidos de clientes con columnas para ID de pedido, ID de cliente y fecha de pedido. Para encontrar pedidos duplicados para cada cliente, se podría usar la siguiente consulta:

SELECT order_id, customer_id, order_date,
       ROW_NUMBER() OVER (PARTITION BY customer_id, order_date
                          ORDER BY order_id) AS row_num
FROM orders

En esta consulta, la función ROW_NUMBER() se usa con la cláusula PARTITION BY para agrupar los pedidos por cliente y fecha de pedido. La función luego asigna un número único a cada fila dentro de cada partición, basándose en el ID de pedido.

La tabla resultante tendrá una columna adicional llamada “row_num” que contiene los números de fila asignados. Los duplicados pueden entonces identificarse seleccionando filas con row_num mayor que 1.

Usar la función ROW_NUMBER() con la cláusula PARTITION BY puede ser una herramienta poderosa para encontrar duplicados en bases de datos SQL. Al agrupar las filas en particiones basándose en criterios específicos, la función puede asignar números únicos a cada fila dentro de cada partición, facilitando la identificación de duplicados.

Usando Instrucción CASE con Función ROW_NUMBER()

En SQL, la función ROW_NUMBER() se usa para asignar un número secuencial único a cada fila en un conjunto de resultados. Esta función se puede usar en conjunto con la instrucción CASE para identificar registros duplicados en una tabla.

La instrucción CASE permite que se aplique lógica condicional a cada fila en un conjunto de resultados. Al utilizar la función ROW_NUMBER() dentro de la instrucción CASE, se puede determinar el número de ocurrencias de cada registro.

Por ejemplo, la siguiente consulta SQL se puede usar para encontrar registros duplicados en una tabla “users” basándose en las columnas “first_name” y “last_name”:

SELECT *,
CASE
    WHEN ROW_NUMBER() OVER (PARTITION BY first_name, last_name ORDER BY id) > 1
    THEN 'Duplicado'
    ELSE 'Único'
END AS duplicate_status
FROM users;

La consulta anterior particiona el conjunto de resultados por las columnas “first_name” y “last_name” y ordena las filas por la columna “id”. La función ROW_NUMBER() asigna un número secuencial único a cada fila dentro de cada partición.

La instrucción CASE luego verifica si el valor ROW_NUMBER() es mayor que 1. Si lo es, entonces la fila se identifica como duplicado. Si no, la fila se identifica como única.

El conjunto de resultados incluirá una columna adicional llamada “duplicate_status” que muestra “Duplicado” o “Único” para cada fila.

id first_name last_name email duplicate_status
1 John Smith john@example.com Único
2 Jane Doe jane@example.com Único
3 John Smith john.smith@example.com Duplicado
4 Bob Johnson bob@example.com Único
5 Jane Doe jane.doe@example.com Duplicado

En el ejemplo anterior, las filas 1, 2 y 4 se identifican como únicas, mientras que las filas 3 y 5 se identifican como duplicados basándose en las columnas “first_name” y “last_name”.

Al utilizar la función ROW_NUMBER() dentro de la instrucción CASE, los registros duplicados se pueden identificar y gestionar fácilmente en una tabla SQL.

Beekeeper Studio Es Una GUI de Base de Datos Gratuita y de Código Abierto

La mejor herramienta de consultas y editor SQL que he usado. Proporciona todo lo que necesito para gestionar mi base de datos. - ⭐⭐⭐⭐⭐ Mit

Beekeeper Studio es rápido, intuitivo y fácil de usar. Beekeeper soporta muchas bases de datos y funciona muy bien en Windows, Mac y Linux.

La versión de Linux de Beekeeper tiene todas las funciones, sin recortes ni compromisos de características.

Lo Que Dicen Los Usuarios Sobre Beekeeper Studio

★★★★★
"Beekeeper Studio reemplazó por completo mi antiguo flujo de trabajo con SQL. Es rápido, intuitivo y hace que trabajar con bases de datos sea agradable de nuevo."
— Alex K., Desarrollador de Bases de Datos
★★★★★
"He probado muchas GUIs de bases de datos, pero Beekeeper logra el equilibrio perfecto entre características y simplicidad. Simplemente funciona."
— Sarah M., Ingeniera Full Stack

¿Listo para Mejorar tu Flujo de Trabajo con SQL?

download Descargar Gratis