Em um banco de dados de um Ministério Público, há uma tabela chamada Promotor, com os campos: PromotorID,Nome, Cidadee DataIngresso. Um relatório precisa listar os 10 promotores mais antigos, isto é, com a menor data de ingresso.
Para isso e em condições ideais, o comando SQL que deve ser utilizado no SQL Server 2019+ é:
ASELECT FIRST 10 PromotorID, Nome, Cidade, DataIngresso FROM Promotor ORDER BY DataIngresso ASC;
BSELECT PromotorID, Nome, Cidade, DataIngresso FROM Promotor ORDER BY DataIngresso ASC OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY;
CSELECT PromotorID, Nome, Cidade, DataIngresso FROM Promotor ORDER DataIngresso ASC OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY;
DSELECT PromotorID, Nome, Cidade, DataIngresso FROM Promotor ORDER BY 3 ASC OFFSET 0 ROWS FETCH NEXT 10 ROWS;
ESELECT PromotorID, Nome, Cidade, DataIngresso FROM Promotor LIMIT 10;
Revelar gabarito e comentário▾
GabaritoB — SELECT PromotorID, Nome, Cidade, DataIngresso FROM Promotor ORDER BY DataIngresso ASC OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY;
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
SQL Server: paginação com OFFSET e FETCH
Gabarito: letra B. No SQL Server 2019+, a forma correta de limitar o número de linhas retornadas em uma consulta é usar a cláusula OFFSET combinada com FETCH NEXT, que é a implementação do padrão SQL para paginação. A alternativa B está correta porque utiliza ORDER BY DataIngresso ASC (para ordenar do mais antigo para o mais recente) e OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY (para pular 0 linhas e retornar as próximas 10).
A consulta precisa listar os 10 promotores mais antigos, ou seja, aqueles com a menor data de ingresso. Para isso, é necessário ordenar os registros pela coluna DataIngresso em ordem crescente (ASC), pois a menor data vem primeiro. Em seguida, para limitar o resultado a apenas 10 linhas, o SQL Server oferece a sintaxe OFFSET ... ROWS FETCH NEXT ... ROWS ONLY, que é a forma padrão de paginação nesse SGBD. Essa sintaxe exige que a cláusula ORDER BY esteja presente, pois a paginação é feita sobre um conjunto ordenado.
A cláusula OFFSET especifica quantas linhas devem ser puladas antes de começar a retornar resultados, e FETCH NEXT define quantas linhas serão retornadas a partir desse ponto. No caso, OFFSET 0 ROWS pula zero linhas (começa do primeiro registro) e FETCH NEXT 10 ROWS ONLY retorna as 10 primeiras linhas do resultado ordenado. Essa é a maneira correta e eficiente de implementar a paginação no SQL Server, especialmente a partir da versão 2012, e é a que a banca espera em uma questão sobre esse SGBD.
É importante destacar que a sintaxe LIMIT, comum no MySQL e PostgreSQL, não é suportada no SQL Server. Da mesma forma, SELECT FIRST, que existe no Microsoft Access, não é válida no SQL Server. A alternativa C erra ao omitir a palavra-chave BY na cláusula ORDER BY, tornando a sintaxe inválida. A alternativa D usa ORDER BY 3, que ordena pela terceira coluna da lista de seleção (Cidade), o que não atende ao requisito de ordenar por DataIngresso. A alternativa E usa LIMIT, que não é suportado no SQL Server.
A pegadinha desta questão está em reconhecer a sintaxe específica do SQL Server para limitar resultados. Muitos candidatos, acostumados com outros bancos, podem marcar a alternativa E (LIMIT) ou a alternativa A (SELECT FIRST), mas ambas são inválidas no SQL Server. A banca explora exatamente essa confusão entre os dialetos SQL dos diferentes SGBDs.
NÃO CAIA NESSA!
A banca explora a confusão entre os dialetos SQL. LIMIT é do MySQL/PostgreSQL, SELECT FIRST é do Access, e ORDER DataIngresso (sem BY) é um erro de sintaxe. No SQL Server, a única forma correta de limitar resultados é com OFFSET ... FETCH NEXT. Memorize essa diferença para não cair na pegadinha.
1ORDER BY (obrigatório)
2OFFSET 0 ROWS
3FETCH NEXT 10 ROWS ONLY
LEVEL · soulevel.com.br
Alternativa A — ❌ Incorreta
A sintaxe SELECT FIRST 10 não é válida no SQL Server. O comando FIRST é uma palavra-chave do Microsoft Access, não do SQL Server. No SQL Server, para limitar o número de linhas, deve-se usar OFFSET ... FETCH NEXT ou TOP. Portanto, essa alternativa está incorreta.
Alternativa B — ✅ Correta ⟵ GABARITO
Esta é a sintaxe correta para o SQL Server. A consulta ordena os registros por DataIngresso em ordem crescente (ASC), o que coloca os promotores mais antigos (menor data) no topo. Em seguida, OFFSET 0 ROWS pula zero linhas e FETCH NEXT 10 ROWS ONLY retorna as 10 primeiras linhas, exatamente os 10 promotores mais antigos. A sintaxe está completa e correta.
Alternativa C — ❌ Incorreta
O erro está na cláusula ORDER DataIngresso ASC, que deveria ser ORDER BY DataIngresso ASC. A palavra-chave BY é obrigatória na sintaxe do ORDER BY. Sem ela, o comando é inválido e geraria um erro de sintaxe no SQL Server.
Alternativa D — ❌ Incorreta
A cláusula ORDER BY 3 ordena os resultados pela terceira coluna da lista de seleção, que é Cidade, e não por DataIngresso. Isso não atende ao requisito de listar os promotores mais antigos. Além disso, a cláusula FETCH NEXT 10 ROWS está sem a palavra-chave ONLY, que é opcional, mas o erro principal é a ordenação pela coluna errada.
Alternativa E — ❌ Incorreta
A cláusula LIMIT 10 é uma sintaxe do MySQL e do PostgreSQL, não do SQL Server. No SQL Server, essa cláusula não é suportada e geraria um erro de sintaxe. A forma correta de limitar resultados no SQL Server é com OFFSET ... FETCH NEXT ou TOP.