SQL: cómo evitar resultados duplicados

PorLucía Montero Rodríguez

SQL: cómo evitar resultados duplicados

En artículos anteriores hemos visto, entre otras operaciones, cómo obtener mediante SQL los datos de una o más tablas relacionadas entre sí. Sin embargo, es posible que en algún momento la definición empleada de, como resultado, datos repetidos.

Por ejemplo, utilizando la base de datos librería.mdb, vamos a crear una consulta que muestre el nombre de todas las editoriales con ventas. Para conseguirlo, escribiremos el siguiente código:

SELECT editorial.nombre AS Proveedor
FROM Editorial INNER JOIN
(Libros INNER JOIN Facturas ON Libros.codlibro=Facturas.codlibro)
ON Editorial.codeditorial=Libros.codeditorial;

Fíjate cómo hemos definido las dos relaciones en dicha sentencia. Primero, la de Editorial Libros y a continuación y entre paréntesis, la de Libros Facturas. Es decir, cuando tengas más de una relación, la segunda y posteriores deberán anidarse con paréntesis adecuadamente.

SQL Nombre de las editoriales de los libros que se han vendidoLa instrucción anterior, provocará por pantalla el resultado de la imagen al ejecutar la consulta. Como puedes ver, aparece una línea por cada una de las ventas efectuadas, pero existen nombres repetidos, lo que no parece demasiado lógico. Para evitarlo, sólo necesitamos añadir una de las siguientes cláusulas a la instrucción anterior, justo detrás de SELECT.

DISTINCT

Provoca que no aparezcan los registros duplicados, en función de los campos que queremos mostrar en la consulta.

DISTINCTROW

SQL Nombre de las editoriales de los libros que se han vendidos sin duplicadosComo la anterior, elimina los registros duplicados, en función de los campos incluidos en la consulta, aunque no aparezcan en el resultado de la misma. Es decir, evalúa la coincidencia completa del registro, no sólo de los campos a mostrar

En nuestro ejemplo, el resultado es el mismo con ambos términos, como se puede apreciar en la imagen.

Diferencias de resultados

Para aportar mayor claridad, hemos añadido a la tabla Clientes el último registro que se muestra en la siguiente imagen, correspondiente al cliente Francisco Márquez Sierra:

Adición de nuevo registro a la tabla Clientes

Ahora vamos a escribir una consulta en la que aparezcan los nombres de nuestros clientes de tres formas distintas para apreciar mejor las diferencias entre el uso o no de las diferentes cláusulas.

SELECT nombre FROM clientes; SQL Resultado sin control de duplicados Muestra los nombres de los 11 clientes repitiendo Francisco.
SELECT DISTINCT nombre FROM clientes; SQL Resultado de consulta controlando los duplicados con DISTINCT Muestra sólo 10 nombres, ya que sólo evalúa las repeticiones en el campo Nombre, por lo que Francisco se muestra una única vez al estar repetido.
SELECT DISTINCTROW nombre FROM clientes; SQL Resultado de consulta controlando los duplicados con DISTINCTROW De nuevo aparecen los 11 nombres, ya que DISTINCTROW comprueba que existan registros completos duplicados.

Ahora puedes prevenir la obtención de resultados duplicados con SQL

Acerca del autor

Lucía Montero Rodríguez administrator