«LIMIT» en SQL Server

Para empezar, tenemos que tener claro que la cláusula LIMIT  no existe en Microsoft SQL Server.

En la actual versión de SQL Server , hay una nueva forma de limitar los registros utilizando la cláusula OFFSET.

Dejo aquí unos ejemplos que creo que ayudarán a entenderlo.

SQL Server anterior de 2012

Este sería un ejemplo de como se haría una consulta en Sql Server en versiones anteriores del 2012

SELECT *
FROM (SELECT *, row_number() over (ORDER BY id ASC) as row from TableName) A 
WHERE row > 0 and row <= 20 ORDER BY id ASC

Observaciones

Los filtros de la cláusula WHERE se añaden en la subconsulta, y no en la consulta principal.

La funcionalidad no funciona como el LIMIT. Si queremos consultar los siguientes 20 registros, tendremos que sumarle 20 a los dos valores: row > 20 and row <= 40

SELECT *
FROM (
  SELECT *, row_number() over (ORDER BY id ASC) as  row from TableName 
  WHERE column = filter
) 
A 
WHERE row > 0 and row <= 20 ORDER BY id ASC

SQL Server 2012 y posterior

Con OFFSET podemos observar que nos olvidamos de calcular el número de registros ya que nos ofrece algo similar al LIMIT.

En este ejemplo empezará a mostrar registros a partir del registro 0 y continuará mostrando los siguientes 20 registros.

Si añadiésemos un 20 en el primer parámetro mostraría  a partir de 20 los siguientes 20. Y así sucesivamente.

SELECT * FROM Table
WHERE column LIKE  filter 
ORDER BY id ASC 
OFFSET 0 ROWS FETCH NEXT 20 ROWS ONLY