SQL más inteligente: Aprende cómo WITH TIES puede mejorar tus reportes
¿Qué es WITH TIES y por qué deberías usarlo?
Cuando trabajamos con grandes volúmenes de datos en SQL, es común querer limitar la cantidad de registros devueltos en una consulta para mejorar el rendimiento o enfocarnos solo en la información más relevante. Es aquí donde la cláusula FETCH FIRST o LIMIT se convierte en una herramienta muy útil. Sin embargo, en algunos casos, estas cláusulas pueden excluir filas que comparten el mismo valor con la última fila seleccionada.
¿Te ha pasado que filtras los 5 productos más vendidos y notas que algunos productos con el mismo nivel de ventas quedan fuera del reporte? Aquí es donde WITH TIES entra en acción.
WITH TIES es una opción que se usa junto con FETCH FIRST en SQL para incluir automáticamente las filas adicionales que tengan el mismo valor en la columna utilizada para ordenar los datos. Esto asegura que los resultados no queden truncados arbitrariamente, sino que incluyan todos los registros relevantes, ofreciendo un análisis más completo y preciso.
¿Por qué deberías usar WITH TIES?
Imagina que estás generando un reporte de los 10 empleados con los salarios más altos, pero resulta que varios empleados tienen el mismo salario en la posición número 10. Si utilizas simplemente FETCH FIRST 10 ROWS ONLY, podrías estar dejando fuera a empleados con el mismo salario, generando informes incompletos o inexactos. Con WITH TIES, todos los empleados con el mismo salario serán incluidos, garantizando la integridad de la información.
Ventajas de usar WITH TIES:
- Evita la pérdida de datos importantes que comparten el mismo valor en la columna de orden.
- Útil en reportes donde la precisión y la equidad en la presentación de datos son cruciales.
- Garantiza consistencia cuando los datos están agrupados por atributos clave como ventas, calificaciones o puntuaciones.
¿Cuándo deberías usar WITH TIES?
Puedes considerar el uso de WITH TIES en los siguientes escenarios:
- Reportes de ranking: Cuando necesitas mostrar a todos los participantes con puntajes iguales en un ranking de rendimiento.
- Análisis de ventas: Al seleccionar los productos más vendidos sin dejar fuera los que alcanzaron las mismas cifras.
- Listados limitados: Cuando se requiere un número limitado de registros pero se quiere mantener equidad en los datos presentados.
- Visualización de datos: Para asegurar que los reportes reflejen correctamente las tendencias y patrones de datos.
Primer ejemplo: obtener los 3 salarios más altos con posibles empates
Supongamos que tenemos la tabla EMPLOYEES con los siguientes datos:
| EMPLOYEE_ID | NAME | SALARY |
|---|---|---|
| 1 | Ana | 5000 |
| 2 | Luis | 7000 |
| 3 | Marta | 8000 |
| 4 | Juan | 7000 |
| 5 | Pepe | 6000 |
| 6 | Laura | 8000 |
Si usamos la siguiente consulta sin WITH TIES:
SELECT NAME, SALARY
FROM EMPLOYEES
ORDER BY SALARY DESC
FETCH FIRST 3 ROWS ONLY;
Resultado esperado (sin WITH TIES):
NAME | SALARY
-------|--------
Marta | 8000
Laura | 8000
Luis | 7000
Consulta usando WITH TIES:
SELECT NAME, SALARY
FROM EMPLOYEES
ORDER BY SALARY DESC
FETCH FIRST 3 ROWS WITH TIES;
Resultado esperado (con WITH TIES):
NAME | SALARY
-------|--------
Marta | 8000
Laura | 8000
Luis | 7000
Juan | 7000
Explicación:
- La cláusula
WITH TIESincluye filas adicionales si los valores de la columna ordenada coinciden con el último valor límite (7000en este caso). - Sin
WITH TIES, solo obtendríamos las primeras 3 filas estrictamente.
Segundo ejemplo: seleccionar los productos más caros con posibles empates
Supongamos la tabla PRODUCTS:
| PRODUCT_ID | PRODUCT_NAME | PRICE |
|---|---|---|
| 101 | Laptop | 1200 |
| 102 | Tablet | 800 |
| 103 | Monitor | 500 |
| 104 | Phone | 800 |
| 105 | Headphones | 300 |
Consulta para obtener los 2 productos más caros sin empates:
SELECT PRODUCT_NAME, PRICE
FROM PRODUCTS
ORDER BY PRICE DESC
FETCH FIRST 2 ROWS ONLY;
Resultado esperado sin WITH TIES:
PRODUCT_NAME | PRICE
--------------|------
Laptop | 1200
Tablet | 800
Consulta para obtener los productos más caros considerando posibles empates:
SELECT PRODUCT_NAME, PRICE
FROM PRODUCTS
ORDER BY PRICE DESC
FETCH FIRST 2 ROWS WITH TIES;
Resultado esperado con WITH TIES:
PRODUCT_NAME | PRICE
--------------|------
Laptop | 1200
Tablet | 800
Phone | 800
Explicación:
El producto “Phone” también se incluye porque tiene el mismo precio que “Tablet”, asegurando que no se excluyan filas con valores idénticos.
Te recomiendo usarlo en estos casos:
- Cuando desees incluir filas adicionales con valores idénticos en la columna de orden.
- Asegura resultados más completos en consultas donde los valores pueden repetirse.
- Puede generar resultados inesperados si no se considera correctamente el impacto en la cantidad de registros devueltos.

Social List