Tema SQL
FETCH … WITH TIES y OFFSET/FETCH
Limitar filas con estándar SQL (OFFSET/FETCH) y empatar en el límite del ORDER BY.
Descripción
FETCH FIRST n ROWS ONLY recorta el resultado tras ORDER BY. WITH TIES (donde exista) incluye todas las filas que empatan con la última fila del “top n” en la clave de orden. OFFSET omite filas iniciales para paginación. MySQL usa LIMIT/OFFSET; SQL Server OFFSET…FETCH; Oracle FETCH FIRST…
Estructura general
Forma habitual de la sentencia: orden de cláusulas, qué parte filtra, agrupa o proyecta columnas, y qué devuelve el motor. Cópiala como plantilla y sustituye nombres por tus tablas reales.
ORDER BY salario DESC
FETCH FIRST 10 ROWS WITH TIES;
ORDER BY id
OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;
Componentes
Cada componente tiene un papel concreto en la ejecución lógica de la sentencia. Léelos en orden: así entiendes qué puedes omitir, qué es obligatorio y qué expresiones son válidas en cada sitio según tu motor.
- WITH TIES
- Requiere ORDER BY; sin él el comportamiento no está definido de forma útil.
- OFFSET
- Coste en grandes offsets: considera cursor o clave “seek” en paginación profunda.
Ejemplos
Ejemplo 1
SELECT nombre, salario
FROM empleados
ORDER BY salario DESC
FETCH FIRST 3 ROWS WITH TIES;
Ejemplo 2
SELECT * FROM t ORDER BY k FETCH NEXT 5 ROWS ONLY;
Los ejemplos son ilustrativos. En producción usa consultas parametrizadas (prepared statements), revisa índices y aplica el principio de menor privilegio en cuentas de base de datos.