Sintaxe do SELECT: WHERE, BETWEEN e ORDER BY
Gabarito: letra D. A consulta correta usa a cláusula WHERE para filtrar os registros com Valor entre 200,00 e 1.000,00 (via BETWEEN ... AND ...) e a cláusula ORDER BY Origem para ordenar o resultado pela coluna Origem — exatamente o que a alternativa D apresenta. As demais alternativas erram ao usar HAVING (que filtra grupos, não linhas), ORDER BY com condição booleana, ASC dentro do WHERE, ou sintaxes inexistentes como <> e UNTIL.
O comando SELECT é a instrução da linguagem SQL (DML/DQL) usada para consultar dados de uma ou mais tabelas. Sua estrutura básica é SELECT colunas FROM tabela [WHERE condição] [ORDER BY coluna]. A cláusula WHERE filtra as linhas da tabela antes de qualquer agrupamento ou ordenação, aplicando condições sobre os valores das colunas. Já a cláusula ORDER BY ordena o resultado final da consulta, por padrão em ordem ascendente (ASC), podendo ser descendente (DESC).
O operador BETWEEN é uma forma concisa de verificar se um valor está dentro de um intervalo inclusivo. A sintaxe correta é coluna BETWEEN valor_inferior AND valor_superior, que equivale a coluna >= valor_inferior AND coluna <= valor_superior. No caso, Valor BETWEEN 200.00 AND 1000.00 retorna as passagens cujo valor seja maior ou igual a 200,00 e menor ou igual a 1.000,00.
A cláusula HAVING, por sua vez, é utilizada para filtrar grupos de registros após a aplicação de GROUP BY, geralmente com funções de agregação (COUNT, SUM, AVG, etc.). Usar HAVING sem GROUP BY para filtrar linhas individuais é um erro conceitual — o filtro de linhas deve ser feito com WHERE. A banca explora exatamente essa confusão entre WHERE (filtra linhas) e HAVING (filtra grupos).
Na prática, para a tabela Passagem (ID, Origem, Destino, Valor), a consulta correta percorre todas as linhas, seleciona apenas aquelas cujo Valor está entre 200,00 e 1.000,00, e apresenta as colunas Origem e Destino ordenadas alfabeticamente pela Origem. Por exemplo, se houver passagens com valores 150,00, 250,00 e 1.200,00, apenas a de 250,00 aparecerá no resultado.
A pegadinha central desta questão é a troca de WHERE por HAVING e a invenção de sintaxes para o intervalo (;, <>, UNTIL). O candidato que não domina a função de cada cláusula tende a marcar uma alternativa com HAVING, mas o filtro de linhas exige WHERE. Guarde a fronteira: WHERE filtra linhas; HAVING filtra grupos; ORDER BY ordena o resultado — é nela que as alternativas se dividem.
Alternativa A — ❌ Incorreta
Usa HAVING para filtrar linhas individuais, o que é incorreto — HAVING serve para filtrar grupos após GROUP BY. Além disso, a sintaxe BETWEEN (200.00; 1000.00) é inválida: o BETWEEN exige a palavra-chave AND entre os limites, não ponto e vírgula.
Alternativa B — ❌ Incorreta
A cláusula ORDER BY não aceita expressões booleanas como Origem AND (Valor >= 200.00 OR Valor <= 1000.00). Além disso, a condição (Valor >= 200.00 OR Valor <= 1000.00) está logicamente errada, pois aceitaria qualquer valor (todo número é >= 200 OU <= 1000), e o filtro deveria usar AND (entre 200 e 1000), não OR.
Alternativa C — ❌ Incorreta
WHERE Origem ASC é inválido: ASC (ascendente) só pode ser usado com ORDER BY, não dentro do WHERE. Além disso, BETWEEN (200.00 <> 1000.00) usa o operador <> (diferente), que não faz parte da sintaxe do BETWEEN — o correto é BETWEEN 200.00 AND 1000.00.
Alternativa D — ✅ Correta ⟵ GABARITO
A consulta está sintaticamente e semanticamente correta: SELECT Origem, Destino seleciona as colunas pedidas; FROM Passagem indica a tabela; WHERE Valor BETWEEN (200.00 AND 1000.00) filtra as linhas cujo valor está no intervalo inclusivo entre 200,00 e 1.000,00; e ORDER BY Origem ordena o resultado pela coluna Origem em ordem ascendente (padrão).
Alternativa E — ❌ Incorreta
Usa HAVING para filtrar linhas (erro conceitual, como na alternativa A) e Origem ASC dentro do HAVING, o que é inválido — ASC só se aplica ao ORDER BY. Além disso, BETWEEN (200.00 UNTIL 1000.00) usa a palavra UNTIL, que não existe na sintaxe SQL — o correto é AND.
Gabarito: letra D