Evitar duplicados usando DISTINCT en ORACLE es una de las mejores prácticas para garantizar conjuntos de resultados limpios y consistentes en nuestras consultas SQL. La cláusula DISTINCT se utiliza dentro de una instrucción SELECT
para eliminar filas duplicadas, devolviendo solo una fila por cada grupo de valores repetidos. Esto resulta especialmente útil al trabajar con datos que contienen redundancias, como listados de clientes, productos o transacciones.
En este artículo, primero explicaré la sintaxis básica de la cláusula DISTINCT y luego mostraré ejemplos prácticos para su aplicación en diferentes escenarios. Lo interesante de DISTINCT es que puedes aplicarlo tanto a una sola columna como a combinaciones de varias columnas, lo que permite controlar con precisión qué valores deben considerarse únicos en el resultado.
La cláusula DISTINCT en Oracle es una herramienta imprescindible para optimizar la calidad de los datos y preparar resultados que sean más fáciles de interpretar. Por ejemplo, puedes utilizarla para obtener un listado único de departamentos en una empresa o para identificar las distintas categorías de productos disponibles en una base de datos.
Para más información, puedes consultar la documentación oficial de ORACLE.
Sintaxis
La sintaxis básica para evitar duplicados usando DISTINCT en Oracle es la siguiente:
select distinct columna1 from nombreTabla; select distinct columna1, columna2 from nombreTabla;
En la primera sentencia evalúa los datos de la columna 1 para evitar duplicados mientras que en la segunda evalúa los duplicados en base a la combinación de valores de las dos columnas.
Ejemplos
Usaremos la siguiente tabla llamada empleados para realizar los ejemplos (al final de la página está disponible el script para crearla)

Mostrar los diferentes puestos
Para mostrar los valores diferentes de un campo y así evitar duplicados, escribe después del SELECT la palabra DISTINCT seguida del nombre de uno o varios campos:
select distinct puesto from empleados;

Ejemplo completo
Copia y pega el siguiente código en tu consola de Oracle y realiza paso a paso leyendo los comentarios.
-- www.MiguelTroyano.com -- Borramos la tabla si existe drop table empleados; -- Creamos la tabla create table empleados ( id_empleado numeric(2,0), id_departamento numeric(2,0), nombre character varying(50), puesto character varying(50), fecha_alta date, sueldo integer ); -- Insertamos valores insert into empleados values (1,1,'Miguel Troyano','Analista',to_date('26/09/1986','DD/MM/YYYY'),60000); insert into empleados values (2,1,'Ismael Troyano','Analista',to_date('01/01/2001','DD/MM/YYYY'),60000); insert into empleados values (3,1,'Jose Troyano','Alta Dirección',to_date('01/01/2001','DD/MM/YYYY'),80000); insert into empleados values (4,1,'Pilar Redondo','Alta Dirección',to_date('02/02/2002','DD/MM/YYYY'),80000); -- Mostramos los diferentes puestos select distinct puesto from empleados;