Questão de Banco de Dados — Consultas e Comandos em SQL — INSTITUTO AOCP 2025
Banco de Dados›Consultas e Comandos em SQL
Código
qa698970
Banca
INSTITUTO AOCP
Órgão
IF MS
Ano
2025
Cargo
Ana TI ( )
Considere o seguinte comando SQL, aplicado a uma base de dados de funcionários no MySQL: SELECT nome, salario, CASE WHEN salario >= 10000 THEN ‘Alta Renda’ WHEN salario BETWEEN 5000 AND 9999 THEN ‘Média Renda’ ELSE ‘Baixa Renda’ END AS faixa_renda FROM funcionarios WHERE cargo IN (‘Analista’, ‘Professores’) AND YEAR(data_admissao) <= 2020 ORDER BY faixa_renda, salario DESC; Com base nesse cenário, assinale a alternativa que descreve corretamente o comportamento da consulta.
AA consulta retorna apenas os funcionários admitidos após 2020 que ocupam o cargo de analista e professor, agrupados pela média salarial de cada faixa.
BA consulta exibe nome, salário e faixa de renda de analistas e professores admitidos até 2020, ordenando pela faixa de renda e salário decrescente.
CA cláusula CASE realiza uma filtragem nos dados, removendo os funcionários da faixa “Baixa Renda” da tabela.
DA consulta atualiza os salários dos funcionários de acordo com a faixa salarial calculada pela cláusula CASE.
EA função YEAR (data_admissao) retorna o mês de admissão dos funcionários e é usada para filtrar quem foi contratado após 2020.
Revelar gabarito e comentário▾
GabaritoB — A consulta exibe nome, salário e faixa de renda de analistas e professores admitidos até 2020, ordenando pela faixa de renda e salário decrescente.
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”.
Comportamento da consulta SQL com CASE, WHERE e ORDER BY
Gabarito: letra B. A consulta exibe nome, salário e faixa de renda de analistas e professores admitidos até 2020, ordenando pela faixa de renda e salário decrescente — exatamente o que a alternativa B descreve. O comando usa a cláusula CASE para classificar cada linha em uma faixa de renda, filtra com WHERE (cargo IN e YEAR(data_admissao) <= 2020) e ordena com ORDER BY faixa_renda, salario DESC.
A cláusula CASE é uma expressão condicional do SQL que permite criar um novo valor calculado para cada linha do resultado, com base em condições lógicas. Diferente do que muitos pensam, ela não filtra linhas — ela apenas classifica cada registro em uma categoria. No comando, o CASE avalia o salário de cada funcionário e retorna 'Alta Renda', 'Média Renda' ou 'Baixa Renda', criando uma coluna calculada chamada faixa_renda. Essa coluna não existe na tabela original; ela é gerada na consulta e pode ser usada na ordenação.
A cláusula WHERE, por sua vez, é quem faz a filtragem. No comando, ela restringe o resultado a funcionários cujo cargo esteja na lista ('Analista', 'Professores') e cujo ano de admissão seja menor ou igual a 2020. A função YEAR() extrai o ano de uma data — no caso, o ano de data_admissao — e a comparação <= 2020 inclui os admitidos em 2020 e anos anteriores. É importante notar que a condição é <= 2020, ou seja, até 2020, e não "após 2020".
A ordenação com ORDER BY faixa_renda, salario DESC tem um comportamento interessante: primeiro ordena pela coluna calculada faixa_renda em ordem alfabética ascendente (padrão), o que coloca 'Alta Renda' primeiro, depois 'Baixa Renda' e por fim 'Média Renda'. Dentro de cada faixa, ordena pelo salário em ordem decrescente (DESC), do maior para o menor. Essa é uma pegadinha clássica: a ordenação alfabética da faixa não segue a ordem lógica de renda (alta, média, baixa), mas sim a ordem alfabética dos rótulos.
A banca explora aqui a confusão entre expressão calculada (CASE) e filtro (WHERE), e entre classificação (ORDER BY) e agrupamento (GROUP BY). A alternativa A, por exemplo, menciona "agrupados pela média salarial", o que exigiria GROUP BY e AVG, que não estão presentes. A alternativa C afirma que o CASE filtra, o que é falso. A alternativa D fala em atualizar salários, o que seria um UPDATE, não um SELECT. E a alternativa E troca o ano pelo mês, confundindo a função YEAR().
Guarde a fronteira entre expressão calculada (CASE) e filtro (WHERE): é exatamente nela que as alternativas se dividem. O CASE apenas cria uma coluna derivada; quem restringe as linhas é o WHERE.
1WHERE filtra linhas
2CASE calcula coluna
3ORDER BY ordena
4GROUP BY agrupa
LEVEL · soulevel.com.br
Alternativa A — ❌ Incorreta
Afirma que a consulta retorna funcionários admitidos após 2020 e que há agrupamento pela média salarial. Dois erros: a condição é YEAR(data_admissao) <= 2020, ou seja, admitidos até 2020, e não após; e não há cláusula GROUP BY nem função de agregação AVG — a consulta não agrupa nada, apenas lista os registros individualmente.
Alternativa B — ✅ Correta ⟵ GABARITO
Descreve com precisão o comportamento: exibe nome, salário e faixa de renda (colunas do SELECT, incluindo a calculada pelo CASE), restringe a analistas e professores admitidos até 2020 (WHERE com IN e YEAR <= 2020) e ordena pela faixa de renda e salário decrescente (ORDER BY faixa_renda, salario DESC). Todos os elementos da alternativa espelham exatamente o que o comando faz.
Alternativa C — ❌ Incorreta
Afirma que a cláusula CASE realiza uma filtragem, removendo funcionários da faixa 'Baixa Renda'. O CASE é uma expressão condicional que classifica cada linha, mas não remove nenhuma. A filtragem, se houvesse, seria feita pelo WHERE. O CASE apenas adiciona uma coluna calculada; todas as linhas que passam pelo WHERE permanecem no resultado, inclusive as de 'Baixa Renda'.
Alternativa D — ❌ Incorreta
Afirma que a consulta atualiza os salários. O comando é um SELECT, que apenas lê dados; não há UPDATE nem qualquer modificação no banco. O CASE calcula uma faixa de renda para exibição, mas não altera o valor do salário armazenado na tabela.
Alternativa E — ❌ Incorreta
Afirma que a função YEAR() retorna o mês de admissão e que o filtro seleciona quem foi contratado após 2020. A função YEAR() extrai o ano de uma data, não o mês. E a condição YEAR(data_admissao) <= 2020 inclui os admitidos até 2020, não após. A alternativa inverte tanto a função quanto o operador de comparação.
NÃO CAIA NESSA!
A banca troca o sentido da comparação e da função: diz "após 2020" quando o comando usa <= 2020 (até 2020), e diz que YEAR retorna o mês quando ela retorna o ano. Além disso, confunde CASE (expressão calculada) com filtro e com atualização. Fique atento a essas inversões — com treino você enxerga essas trocas de longe 💪
PEGA ESSA DICA!
Para questões de SQL, identifique o papel de cada cláusula: WHERE filtra linhas, CASE calcula uma coluna, ORDER BY ordena, GROUP BY agrupa. Se a alternativa mencionar agrupamento, média ou atualização, verifique se essas cláusulas/funções existem no comando. E lembre-se: <= 2020 inclui 2020 e anos anteriores; > 2020 seria após.