Skip to main content
La cláusula LIMIT controla cuántas filas se devuelven en los resultados de la consulta. Las filas pueden seleccionarse por cantidad y desplazamiento, o mediante las condiciones que abren y cierran un rango de filas con LIMIT ... AFTER ... UNTIL.

Sintaxis básica

Seleccionar las primeras filas:
Devuelve las primeras m filas del resultado, o todos los registros si hay menos de m. Sintaxis alternativa de TOP (compatible con MS SQL Server):
Esto equivale a LIMIT m y puede utilizarse por compatibilidad con consultas de Microsoft SQL Server. Selección con OFFSET:
Omite las primeras n filas y devuelve las siguientes m. En ambas formas, n y m deben ser enteros no negativos. Seleccionar un rango mediante condiciones:
Devuelve las filas desde la primera fila en la que start_expr es true, o desde el inicio del stream cuando se omite AFTER, hasta la primera fila situada en ese inicio o después de él en la que end_expr es true, sin incluirla; n limita la longitud de ese rango. AFTER start_expr ALL abre un rango en cada fila coincidente. Consulte LIMIT … AFTER … UNTIL más abajo.

Límites negativos

Selecciona filas desde el final del conjunto de resultados utilizando valores negativos: La sintaxis LIMIT -n, -m equivale a LIMIT -m OFFSET -n.

Límites fraccionarios

Usa valores decimales entre 0 y 1 para seleccionar un porcentaje de filas:
  • Las fracciones deben ser valores Float64 mayores que 0 y menores que 1.
  • Los recuentos fraccionarios de filas se redondean al siguiente número entero.

Combinación de tipos de LIMIT

Puede combinar enteros estándar con OFFSET fraccionarios o negativos:
La forma de rango solo se combina con un recuento simple de filas: LIMIT 3 AFTER start_expr toma como máximo tres filas desde el punto en que se abre el rango. OFFSET, los recuentos fraccionarios y negativos, y WITH TIES se rechazan si se usan junto con AFTER o UNTIL. Una cláusula LIMIT BY puede preceder a un rango en la misma consulta, y el SETTING limit sigue limitando el resultado.

LIMIT … WITH TIES

El modificador WITH TIES incluye filas adicionales que tienen los mismos valores de ORDER BY que la última fila incluida por el límite. Solo se aplica a los límites de recuento y de OFFSET, y no puede combinarse con la forma de rango.
Con WITH TIES, también se incluyen todas las filas que coinciden con el último valor:
La fila 6 se incluye porque tiene el mismo valor (2) que la fila 5. Lo mismo ocurre cuando el OFFSET se especifica con la palabra clave OFFSET:
Al omitir las primeras 2 filas y tomar 3, normalmente se devolvería 1, 1, 2, pero se incluye el segundo 2 porque empata con la última fila. WITH TIES también funciona con límites y OFFSET negativos. Incluye filas adicionales que tienen los mismos valores de ORDER BY que la primera fila seleccionada:
Sin WITH TIES, el resultado sería 1, 1, 2, 2. Con WITH TIES, se incluyen tres filas adicionales con el valor 1 porque empatan con la primera fila seleccionada. Este modificador puede combinarse con el modificador ORDER BY ... WITH FILL.

LIMIT … AFTER … UNTIL (rango por condiciones)

Puede limitar el resultado a un rango de filas comprendido entre dos condiciones de contorno:
  • AFTER start_expr: comienza la salida desde la primera fila en la que start_expr es verdadera (esa fila se incluye).
  • AFTER start_expr ALL: devuelve la unión de todos los rangos coincidentes que comienzan donde start_expr es verdadera, sin duplicar filas cuando los rangos se solapan.
  • UNTIL end_expr: finaliza cada rango antes de la primera fila situada en su inicio o después de él en la que end_expr es verdadera (esa fila se excluye).
  • n: recuento opcional de filas. Sin ALL, es la longitud máxima del único rango abierto. Con AFTER ... ALL, es la longitud de cada rango abierto, por lo que el resultado total puede superar n (por ejemplo, LIMIT 2 AFTER number IN (2, 6) ALL puede devolver hasta cuatro filas). Para limitar el número total de filas del resultado, utiliza el SETTING limit, que se aplica como límite global después del rango.
El orden del flujo (el orden en el que se leen las filas) determina cuál es la «primera» coincidencia; usa ORDER BY para controlarlo. Las coincidencias de UNTIL anteriores al inicio de un rango no tienen efecto. Si ambas condiciones coinciden en la fila inicial, el rango queda vacío. Si no se produce ninguna coincidencia de UNTIL en el inicio o después de él, el rango continúa hasta alcanzar su recuento de filas n o el final del stream. Con AFTER ... ALL, las coincidencias posteriores de AFTER pueden abrir nuevos rangos una vez finalizado un rango anterior. Con AFTER y sin ALL, el paso de rango evalúa AFTER hasta encontrar un fragmento que contenga una coincidencia de inicio. A continuación, evalúa UNTIL en ese fragmento y en los fragmentos siguientes mientras el rango permanezca abierto. Las expresiones se evalúan sobre fragmentos completos, por lo que UNTIL puede evaluarse incluso para filas anteriores al inicio dentro del fragmento inicial. Si UNTIL contiene funciones con estado como rowNumberInAllBlocks, o funciones no deterministas dentro de la consulta, se evalúa desde el primer fragmento para preservar el comportamiento de dichas funciones. Sin ALL, AFTER se evalúa únicamente hasta el fragmento inicial; en los fragmentos siguientes solo se evalúa UNTIL. Las coincidencias de fin anteriores al inicio siguen sin tener efecto. Ejemplos: Las 3 primeras filas a partir de la primera fila en la que number >= 3:
Filas desde la primera fila donde number >= 2 hasta (sin incluirla) la primera fila donde number >= 6:
Sin n, se devuelven todas las filas desde la coincidencia de AFTER hasta el final del stream (o hasta UNTIL):
Sin n pero con UNTIL, el rango se extiende desde la primera coincidencia de AFTER hasta la primera coincidencia de UNTIL que se produzca en esa misma posición o después de ella:
Una coincidencia de UNTIL anterior al inicio se ignora; aquí number = 1 no tiene efecto y el rango termina antes de number = 6:
Emite 2 filas después de cada fila coincidente, sin duplicar los solapamientos:
Con ALL y UNTIL, cada rango abierto termina al alcanzar sus n filas o en la siguiente coincidencia de UNTIL, lo que ocurra primero; aquí el rango abierto en 6 queda cortado por number = 7:
Sin n, una coincidencia de UNTIL cierra el rango actual y una coincidencia posterior de AFTER abre uno nuevo, que se extiende hasta el final cuando no le sigue ninguna otra coincidencia de UNTIL:
Sin n y sin UNTIL, cada rango abierto se extiende hasta el final del stream, por lo que AFTER start_expr ALL devuelve las mismas filas que AFTER start_expr.
  • WITH TIES, los valores fraccionarios o negativos de LIMIT/OFFSET, y OFFSET no son compatibles junto con AFTER/UNTIL.
  • El pushdown preliminar de LIMIT se deshabilita cuando se usa AFTER/UNTIL.
  • AFTER y UNTIL solo se reconocen como palabras clave cuando les sigue una expresión de límite, por lo que un identificador llamado after o until sigue funcionando como recuento de filas (LIMIT after, LIMIT after BY x). Cuando ambas lecturas son posibles, prevalece la palabra clave: LIMIT after(2) corresponde al rango LIMIT AFTER (2); escriba LIMIT (after(2)) para llamar a una función denominada after.
UNTIL por sí solo devuelve las filas desde el inicio del stream hasta la primera fila en la que la condición es true:
Con n, UNTIL por sí solo devuelve como máximo n filas desde el inicio del stream, deteniéndose igualmente en la primera coincidencia:
Un rango puede ir después de LIMIT BY, en cuyo caso se aplica a las filas que LIMIT BY conserva:

Consideraciones

Resultados no deterministas: Sin una cláusula ORDER BY, las filas devueltas pueden ser arbitrarias y variar de una ejecución de la consulta a otra. Límite del servidor: La cantidad de filas devueltas también puede verse afectada por la configuración limit.

Véase también

  • LIMIT BY — Limita el número de filas por cada grupo de valores; resulta útil para obtener los N resultados principales dentro de cada categoría.
Última modificación el 26 de septiembre de 2026