LIMIT, OFFSET e FETCH FIRST
Conheça a sintaxe de paginação no MySQL, no Postgres e no SQL Server.
LIMIT, OFFSET e FETCH FIRST é uma aula grátis de Coding Interview Prep no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Coding Interview Prep, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Coding Interview Prep inclui 4 aulas no total.
Paginação é uma questão entre dialetos
"Como você buscaria as primeiras 10 linhas?" parece trivial até que o entrevistador acrescente "e faça isso em SQL padrão" ou "agora no SQL Server". A sintaxe para limitar linhas é um dos recursos mais fragmentados entre os bancos de dados.
Esta lição apresenta as três formas principais: LIMIT (MySQL/PostgreSQL/SQLite), OFFSET ... FETCH (padrão ANSI, SQL Server) e o TOP mais antigo (SQL Server).
LIMIT no MySQL e no PostgreSQL
A forma mais comum é LIMIT n, que limita o resultado a n linhas. Ela é compatível com MySQL, PostgreSQL e SQLite.
É importante notar que LIMIT é aplicado depois de ORDER BY na ordem lógica de execução, portanto quase sempre você os usa em conjunto. Limitar sem ordenar fornece um conjunto arbitrário de linhas.
SELECT name, salary
FROM employees
ORDER BY salary DESC
LIMIT 10;OFFSET para ignorar linhas
A paginação precisa de um deslocamento para ignorar as páginas anteriores. OFFSET m ignora as primeiras m linhas antes que o limite seja aplicado.
Para obter a página 3 com um tamanho de página de 10, você ignora 20 linhas e obtém 10. A fórmula geral é OFFSET = (page - 1) * page_size.
SELECT name, salary
FROM employees
ORDER BY salary DESC
LIMIT 10 OFFSET 20;Sintaxe com vírgula do MySQL
O MySQL também aceita uma forma com dois argumentos separados por vírgula: LIMIT offset, count. Observe que a ordem é inversa à da forma com palavras-chave, o que costuma confundir as pessoas.
LIMIT 20, 10 significa ignorar 20 linhas e obter 10, sendo idêntico a LIMIT 10 OFFSET 20. Prefira a forma com palavras-chave para ter mais clareza em entrevistas.
SELECT name, salary
FROM employees
ORDER BY salary DESC
LIMIT 20, 10;O padrão ANSI: FETCH FIRST
O padrão SQL usa OFFSET ... ROWS FETCH FIRST ... ROWS ONLY. PostgreSQL, Oracle 12c+, DB2 e SQL Server 2012+ oferecem suporte a ele.
A forma é verbosa, mas é a opção portável. ROW e ROWS são intercambiáveis; FIRST e NEXT são sinônimos.
SELECT name, salary
FROM employees
ORDER BY salary DESC
OFFSET 20 ROWS
FETCH FIRST 10 ROWS ONLY;TOP do SQL Server
O código mais antigo do SQL Server usa TOP n logo depois de SELECT. Ele não tem deslocamento integrado, portanto não consegue, por conta própria, paginar além da primeira página.
Um entrevistador pode pedir que você converta TOP para o formato padrão. SELECT TOP 10 com ORDER BY equivale a FETCH FIRST 10 ROWS ONLY.
SELECT TOP 10 name, salary
FROM employees
ORDER BY salary DESC;TOP WITH TIES
Um recurso interessante do SQL Server: TOP n WITH TIES retorna linhas adicionais quando elas empatam com a última linha na chave de ORDER BY.
Se três pessoas tiverem o décimo maior salário, TOP 10 WITH TIES retornará todas elas, possivelmente 12 linhas. Esse é o equivalente a FETCH FIRST ... WITH TIES no padrão.
SELECT TOP 10 WITH TIES name, salary
FROM employees
ORDER BY salary DESC;ORDER BY é obrigatório para uma paginação determinística
Este é o ponto mais importante da entrevista: OFFSET/LIMIT sem um ORDER BY determinístico é inseguro. O mecanismo pode escolher linhas diferentes para a "página 2" das que escolheu para a "página 1", porque a ordem subjacente não é definida.
Sempre ordene por um conjunto de chaves único ou suficientemente exclusivo. Se sua coluna de ordenação tiver duplicatas, adicione a chave primária como critério de desempate para que as páginas não se sobreponham nem ignorem linhas.
SELECT id, name, salary
FROM employees
ORDER BY salary DESC, id ASC
LIMIT 10 OFFSET 20;Por que a paginação com OFFSET não escala bem
Entrevistadores experientes investigam o desempenho. Um OFFSET grande ainda obriga o banco de dados a gerar e descartar todas as linhas ignoradas. OFFSET 100000 LIMIT 10 lê 100.010 linhas para retornar 10.
O custo cresce linearmente com o número da página, tornando a paginação profunda lenta em tabelas grandes.
Paginação por chave (busca)
A alternativa escalável é a paginação por chave: em vez de ignorar linhas por contagem, você filtra os valores posteriores ao último valor que viu. Isso usa uma varredura de intervalo de índice e continua rápida em qualquer profundidade.
Você guarda a chave de ordenação da última linha da página anterior e solicita as linhas posteriores a ela. Mencionar a paginação por chave é um forte sinal de experiência.
SELECT id, name, created_at
FROM events
WHERE created_at < '2026-01-01 10:00:00'
ORDER BY created_at DESC
LIMIT 10;Tabela de consulta rápida por dialeto
Memorize esta tabela para lembrar rapidamente durante uma entrevista:
- MySQL / Postgres / SQLite:
LIMIT n OFFSET m - Padrão / SQL Server 2012+ / Oracle 12c+:
OFFSET m ROWS FETCH FIRST n ROWS ONLY - SQL Server antigo:
SELECT TOP n(sem deslocamento) - Oracle antigo (anterior à 12c): filtre por
ROWNUMem uma subconsulta
Verificação rápida
Escolha a consulta correta para a página 3, considerando um tamanho de página igual a 10.
Recapitulação
Essenciais da paginação:
LIMIT/OFFSETpara MySQL, Postgres e SQLite;OFFSET ... FETCH FIRSTpara o padrão e o SQL Server moderno;TOPpara o SQL Server antigo.OFFSET = (page - 1) * page_size.- Sempre combine com um
ORDER BYdeterminístico, adicionando um critério de desempate único. - Deslocamentos grandes são lentos; prefira a paginação por chave para páginas muito profundas.
Perguntas Frequentes
A aula “LIMIT, OFFSET e FETCH FIRST” é grátis?
Sim — o texto completo de “LIMIT, OFFSET e FETCH FIRST” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Coding Interview Prep, atualize para CoddyKit PRO. O curso de Coding Interview Prep inclui 4 aulas no total.
O que vou aprender em “LIMIT, OFFSET e FETCH FIRST”?
Conheça a sintaxe de paginação no MySQL, no Postgres e no SQL Server. Você pratica Coding Interview Prep com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Coding Interview Prep?
Nenhuma experiência prévia é necessária. Coding Interview Prep no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “LIMIT, OFFSET e FETCH FIRST”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Coding Interview Prep?
Sim. Cada aula de Coding Interview Prep inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Ordenação por várias colunas e posicionamento de NULL
- LIMIT, OFFSET e FETCH FIRST
- Retornando as linhas Top-N de forma confiável
- Ordenando por expressões e aliases