Questão de Banco de Dados — Consultas e Comandos em SQL — VUNESP 2023
Banco de Dados›Consultas e Comandos em SQL
Código
vu195622
Banca
VUNESP
Órgão
EsFCEx
Ano
2023
Cargo
CFO/QC ( )
Considere a seguinte tabela de um banco de dados relacional:
Material (ID, Nome, Descrição, Fabricante)
O comando SQL para obter o nome e o fabricante, com a condição de excluir os fabricantes Blue e Green é:
ASELECT Nome, Fabricante FROM Material WHERE Fabricante NOT (‘Blue’,’Green’);
BSELECT Nome, Fabricante FROM Material WHERE Fabricante DISTINCT (‘Blue’,’Green’);
CSELECT Nome, Fabricante FROM Material WHERE Fabricante <> ‘Blue’ OR ‘Green’
DSELECT Nome, Fabricante FROM Material WHERE NOT Fabricante (‘Blue’,’Green’);
ESELECT Nome, Fabricante FROM Material WHERE Fabricante NOT IN (‘Blue’, ‘Green’);
Revelar gabarito e comentário▾
GabaritoE — SELECT Nome, Fabricante FROM Material WHERE Fabricante NOT IN (‘Blue’, ‘Green’);
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: filtro de exclusão com NOT IN
Gabarito: letra E. Para excluir registros cujos valores estejam em uma lista específica, o SQL padrão utiliza o operador NOT IN, que nega a pertinência a um conjunto de valores — exatamente o que a alternativa E faz com WHERE Fabricante NOT IN ('Blue', 'Green'). As demais alternativas apresentam sintaxes inválidas ou lógica incorreta, como veremos a seguir.
O comando SELECT é a base de qualquer consulta em SQL, e sua estrutura fundamental é SELECT colunas FROM tabela WHERE condição. A cláusula WHERE filtra as linhas que atendem a uma condição lógica. Quando precisamos excluir valores que pertencem a uma lista, o operador IN verifica se um valor está contido na lista, e o operador NOT IN faz o oposto: seleciona apenas os valores que não estão na lista. Por exemplo, WHERE Fabricante IN ('Blue', 'Green') retornaria apenas os materiais desses dois fabricantes; WHERE Fabricante NOT IN ('Blue', 'Green') retorna todos os demais.
A sintaxe correta do NOT IN é: coluna NOT IN (valor1, valor2, ...). É importante notar que a lista deve estar entre parênteses e os valores separados por vírgula. Essa é uma das formas mais comuns de filtrar dados em SQL, e a banca VUNESP costuma cobrar exatamente essa sintaxe em questões de múltipla escolha, como se vê em questões similares de concursos anteriores.
A pegadinha desta questão está em alternativas que parecem plausíveis, mas usam operadores ou sintaxes incorretas. Por exemplo, NOT sozinho não é um operador de comparação; ele precisa ser combinado com IN, LIKE, BETWEEN, etc. Já DISTINCT é usado para eliminar duplicatas no resultado, não para filtrar valores. E o operador <> (diferente) só compara um valor com outro, não com uma lista. Vamos analisar cada alternativa em detalhes.
Alternativa A — ❌ Incorreta
A sintaxe WHERE Fabricante NOT ('Blue','Green') é inválida. O operador NOT sozinho não aceita uma lista de valores como argumento. Para negar a pertinência a uma lista, é obrigatório usar NOT IN. A forma correta seria WHERE Fabricante NOT IN ('Blue', 'Green'). A banca tenta confundir o candidato omitindo o IN, o que torna o comando semanticamente incorreto.
Alternativa B — ❌ Incorreta
Aqui, DISTINCT é usado de forma inadequada. O DISTINCT é uma cláusula que elimina linhas duplicadas do resultado da consulta, e não um operador de comparação. Ele deve vir logo após o SELECT (ex.: SELECT DISTINCT Nome, Fabricante), e não dentro do WHERE. Portanto, a sintaxe WHERE Fabricante DISTINCT ('Blue','Green') não faz sentido e não é aceita pelo SQL.
Alternativa C — ❌ Incorreta
A condição WHERE Fabricante <> 'Blue' OR 'Green' tem dois problemas. Primeiro, o operador <> (diferente) compara um valor com outro, não com uma lista. Segundo, a expressão OR 'Green' está incompleta: falta a comparação Fabricante <> 'Green'. A forma correta seria WHERE Fabricante <> 'Blue' AND Fabricante <> 'Green'. O uso de OR aqui também está errado, pois retornaria todos os registros que não são 'Blue' OU que sejam 'Green' (o que incluiria os 'Green'), não excluindo corretamente.
Alternativa D — ❌ Incorreta
A sintaxe WHERE NOT Fabricante ('Blue','Green') é inválida. O NOT sozinho não aceita uma lista de valores como argumento. Para negar a pertinência a uma lista, é obrigatório usar NOT IN. A forma correta seria WHERE Fabricante NOT IN ('Blue', 'Green'). A banca tenta confundir o candidato omitindo o IN, o que torna o comando semanticamente incorreto.
Alternativa E — ✅ Correta ⟵ GABARITO
A alternativa E usa a sintaxe correta: WHERE Fabricante NOT IN ('Blue', 'Green'). O operador NOT IN verifica se o valor da coluna Fabricantenão está na lista ('Blue', 'Green'), retornando apenas os registros cujos fabricantes são diferentes desses dois. Essa é a forma padrão e mais clara de excluir valores de uma lista em SQL.
PEGA ESSA DICA!
Para memorizar a sintaxe, lembre-se: IN = pertence à lista; NOT IN = não pertence à lista. A lista sempre vai entre parênteses, com valores separados por vírgula. Se a alternativa usar NOT sozinho, DISTINCT no WHERE, ou <> com lista, está errada.