Questão de Banco de Dados — SQL — Quadrix 2023
- Código
- qg027189
- Banca
- Quadrix
- Órgão
- CREFITO-7ª Região(BA e SE)
- Ano
- 2023
- Nível
- Superior
- Cargo
- Programador(a)
- CCerto
- EErrado
GabaritoE — Errado
Gabarito: ERRADO (alternativa E). O comando select * from fisioterapeuta where rownum > 10; funciona no Oracle — a sintaxe é válida e o comando é executado, apenas retornando nenhuma linha, pois o ROWNUM é uma pseudocoluna atribuída sequencialmente a cada linha do resultado antes da avaliação da condição WHERE. A afirmação de que o ROWNUM só pode ser usado em operações de atualização (UPDATE) é falsa: ele é amplamente utilizado em consultas SELECT para limitar o número de linhas retornadas (ex.: WHERE ROWNUM <= 10).
O ROWNUM é uma pseudocoluna exclusiva do Oracle, atribuída a cada linha do resultado no momento em que a linha é selecionada, antes da aplicação das cláusulas ORDER BY e GROUP BY. Isso significa que, para cada linha candidata, o Oracle atribui um número sequencial (1, 2, 3, ...) e só então avalia a condição do WHERE. Se a condição for falsa para a linha atual, ela é descartada e o número não é reutilizado — o próximo número vai para a próxima linha candidata. Por isso, WHERE ROWNUM > 10 nunca retorna linhas: para a primeira linha, ROWNUM = 1, que não é maior que 10, então ela é descartada; a segunda linha recebe ROWNUM = 2, também não é maior que 10, e assim por diante — nenhuma linha jamais recebe um ROWNUM maior que 10, pois todas são descartadas antes de chegar a esse valor.
Na prática, o ROWNUM é usado principalmente para limitar o número de linhas retornadas em uma consulta, como em SELECT * FROM tabela WHERE ROWNUM <= 10 (que retorna as 10 primeiras linhas). Também é comum em combinação com ORDER BY para obter os "N primeiros" registros, embora seja necessário usar uma subconsulta para ordenar primeiro e depois aplicar o ROWNUM. A pseudocoluna pode ser usada em qualquer comando SQL que aceite uma condição WHERE, incluindo SELECT, UPDATE e DELETE — não há restrição que a limite a operações de atualização.
A pegadinha da questão está em afirmar que o comando "não funciona" — na verdade, ele funciona (é executado sem erro de sintaxe), mas retorna um conjunto vazio. O candidato que conhece o comportamento do ROWNUM sabe que a condição > 10 é logicamente impossível de ser satisfeita, mas isso não torna o comando inválido. A banca explora a confusão entre "não retorna resultados" e "não funciona" — são coisas distintas.
A banca troca o conceito de "comando inválido" por "comando que não retorna linhas". O SELECT ... WHERE ROWNUM > 10 é sintaticamente válido e executa normalmente, apenas devolve zero linhas. O erro do candidato é achar que a pseudocoluna só vale para UPDATE — na verdade, ela é usada justamente em SELECT para limitar resultados (WHERE ROWNUM <= N).
A afirmação contém dois erros: (1) o comando funciona no Oracle — é executado sem erro, apenas retorna nenhuma linha; (2) o ROWNUM não é restrito a operações de UPDATE — ele é uma pseudocoluna utilizável em qualquer comando com WHERE, especialmente em SELECT para limitar o número de linhas. O comportamento correto é: ROWNUM é atribuído sequencialmente antes da avaliação do WHERE, então ROWNUM > 10 nunca é verdadeiro para nenhuma linha, resultando em conjunto vazio — mas o comando é perfeitamente válido.
Gabarito: ERRADO (alternativa E).
Link permanente: /questoes/qg027189