Consulta SQL com filtros compostos (WHERE com AND)
Gabarito: letra A. O comando SELECT Nome FROM Alunos WHERE Nota >= 7 AND Faltas <= 2; é o único que atende exatamente ao pedido: retorna apenas a coluna Nome, aplica o filtro de nota maior ou igual a 7 e o filtro de faltas menor ou igual a 2, combinados pelo operador lógico AND. As demais alternativas ou selecionam colunas extras, ou omitem um dos filtros, ou usam ORDER BY sem a condição completa.
A questão cobra a compreensão da cláusula WHERE com operadores de comparação (>=, <=) e o operador lógico AND. Em SQL, a estrutura básica de uma consulta é SELECT colunas FROM tabela WHERE condição. A condição pode combinar múltiplos critérios com AND (todos devem ser verdadeiros), OR (pelo menos um deve ser verdadeiro) e NOT (negação). Aqui, o enunciado pede dois critérios simultâneos: nota maior ou igual a 7 e faltas menor ou igual a 2. O AND é exatamente o operador que expressa essa simultaneidade.
Vamos decompor o que cada parte do comando faz:
SELECT Nome: projeta apenas a coluna Nome no resultado. Se a questão pede "uma lista com o nome dos alunos", qualquer coluna adicional (como Nota ou Faltas) torna o resultado diferente do solicitado.
FROM Alunos: indica a tabela de origem dos dados.
WHERE Nota >= 7: filtra as linhas onde o valor da coluna Nota é maior ou igual a 7. O operador >= inclui o valor 7.
AND Faltas <= 2: adiciona a segunda condição — a coluna Faltas deve ser menor ou igual a 2. O operador <= inclui o valor 2.
A combinação AND exige que ambas as condições sejam verdadeiras para a linha ser retornada. Ou seja, só aparecem alunos com nota 7 ou mais e com 2 ou menos faltas. Se um aluno tem nota 8 mas 3 faltas, ele é excluído; se tem nota 6 e 1 falta, também é excluído.
Um exemplo prático: suponha a tabela Alunos com os registros abaixo.
Nome | Nota | Faltas |
|---|
Ana | 8 | 1 |
Bruno | 6 | 0 |
Carla | 7 | 3 |
Diego | 9 | 2 |
Elisa | 5 | 4 |
Aplicando WHERE Nota >= 7 AND Faltas <= 2, temos:
Ana: nota 8 (>=7) e faltas 1 (<=2) → incluída.
Bruno: nota 6 (<7) → excluída.
Carla: nota 7 (>=7) mas faltas 3 (>2) → excluída.
Diego: nota 9 (>=7) e faltas 2 (<=2) → incluída.
Elisa: nota 5 (<7) → excluída.
Resultado: Ana e Diego. Perceba que o AND é restritivo: quanto mais condições, menos linhas retornadas.
A pegadinha desta questão está em dois pontos: (1) a diferença entre >= e > (e <= e <) — o enunciado diz "maior ou igual" e "2 ou menos", então os operadores corretos são >= e <=, que incluem os limites; (2) a necessidade de usar AND em vez de OR — se usasse OR, retornaria alunos que atendem a apenas uma das condições, o que não é o pedido.
Outro ponto que a banca explora é a projeção de colunas. O enunciado pede "o nome dos alunos", então SELECT Nome é o correto. Alternativas que trazem SELECT Nome, Nota, Faltas ou SELECT * retornam colunas extras, o que não corresponde ao pedido literal. A cláusula ORDER BY também é um distrator: ela apenas ordena o resultado, mas não substitui a necessidade de aplicar ambos os filtros no WHERE.
Guarde o critério decisivo: a alternativa correta deve ter (1) SELECT apenas com a coluna Nome, (2) WHERE com Nota >= 7, (3) AND, (4) Faltas <= 2. É exatamente essa combinação que separa a letra A das demais.
Alternativa A — ✅ Correta ⟵ GABARITO
O comando SELECT Nome FROM Alunos WHERE Nota >= 7 AND Faltas <= 2; atende perfeitamente ao enunciado. A projeção SELECT Nome retorna apenas o nome dos alunos, como pedido. A cláusula WHERE combina as duas condições com AND: Nota >= 7 (nota maior ou igual a 7) e Faltas <= 2 (faltas menor ou igual a 2). O operador >= inclui o valor 7, e <= inclui o valor 2, exatamente como o enunciado especifica ("maior ou igual a 7" e "2 ou menos faltas").
Alternativa B — ❌ Incorreta
O comando SELECT Nome, Nota, Faltas FROM Alunos WHERE Nota >= 7 AND Faltas <= 2; tem os filtros corretos, mas a projeção está errada. O enunciado pede "uma lista com o nome dos alunos", ou seja, apenas a coluna Nome. Ao incluir Nota e Faltas no SELECT, o resultado traz colunas adicionais, o que não corresponde ao que foi solicitado. A pegadinha aqui é que o filtro está certo, mas a projeção está ampliada demais.
Alternativa C — ❌ Incorreta
O comando SELECT * FROM Alunos WHERE Nota >= 7 AND Faltas <= 2; usa o curinga *, que retorna todas as colunas da tabela. Embora os filtros estejam corretos, o resultado inclui colunas como ID, Nota, Faltas e outras que possam existir, não apenas o Nome. O enunciado pede especificamente "o nome dos alunos", então SELECT * não atende. É o mesmo erro da alternativa B, mas de forma ainda mais ampla.
Alternativa D — ❌ Incorreta
O comando SELECT Nome FROM Alunos WHERE Nota >= 7 ORDER BY Faltas; tem dois problemas. Primeiro, falta o filtro Faltas <= 2 — a consulta retorna alunos com nota >= 7 independentemente do número de faltas, o que contraria o enunciado. Segundo, a cláusula ORDER BY Faltas apenas ordena o resultado por faltas, mas não filtra. A pegadinha é que o candidato pode achar que ORDER BY de alguma forma aplica a condição de faltas, mas ele só organiza a saída, não restringe as linhas.
Alternativa E — ❌ Incorreta
O comando SELECT Nome FROM Alunos WHERE Faltas <= 2 ORDER BY Nota; tem o filtro de faltas correto, mas omite o filtro Nota >= 7. A consulta retorna alunos com 2 ou menos faltas, independentemente da nota, o que não atende ao enunciado. Além disso, ORDER BY Nota apenas ordena o resultado, não filtra por nota. A pegadinha é a inversão: o candidato pode achar que a ordenação por nota de alguma forma aplica o critério de nota, mas ela só organiza a saída.
A regra de ouro para questões assim: leia o enunciado e identifique (1) quais colunas devem aparecer no resultado, (2) quais condições devem ser aplicadas no WHERE, e (3) se há necessidade de ordenação. A alternativa correta é a que casa exatamente esses três pontos. Aqui, a letra A é a única que projeta apenas Nome, aplica os dois filtros com AND e não usa ORDER BY desnecessariamente.
Gabarito: letra A