Pular para o conteúdo principal

Questão de Banco de Dados — Consultas e Comandos em SQL — VUNESP 2023

Banco de DadosConsultas 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 é:

  1. ASELECT Nome, Fabricante FROM Material WHERE Fabricante NOT (‘Blue’,’Green’);
  2. BSELECT Nome, Fabricante FROM Material WHERE Fabricante DISTINCT (‘Blue’,’Green’);
  3. CSELECT Nome, Fabricante FROM Material WHERE Fabricante <> ‘Blue’ OR ‘Green’
  4. DSELECT Nome, Fabricante FROM Material WHERE NOT Fabricante (‘Blue’,’Green’);
  5. 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 Fabricante nã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.

Gabarito: letra E

Link permanente: /questoes/vu195622