Questão de Banco de Dados — Consultas e Comandos em SQL — VUNESP 2023
Banco de Dados›Consultas e Comandos em SQL
Código
vu195769
Banca
VUNESP
Órgão
TRF 3
Ano
2023
Cargo
TJ TRF3
Considere a seguinte consulta SQL feita a partir da tabela de um banco de dados relacional: SELECT Cod, Material, Fabricante FROM Armario WHERE Fabricante NOT IN (‘Abc’) AND Material NOT LIKE (‘Papel%’); A partir dessa consulta SQL, o resultado obtido será composto por registros da tabela Armario, considerando os atributos Cod, Material e Fabricante, sendo que o Fabricante
Adeve ser diferente de “Abc”, além do que, o Material não deve incluir a palavra “Papel” em qualquer parte de sua composição.
Bdeve ser diferente de “Abc” e o Material deve apresentar sequência que não inclua o caractere “%”.
Cnão deve conter a sequência “Abc” em qualquer parte de sua composição, além de o Material não terminar com a palavra “Papel”.
Ddeve ser diferente de “Abc” e o Material não deve apresentar sequência que contenha a palavra “Papel” em seu início.
Enão deve conter a sequência “Abc” em qualquer parte de sua composição, além de que o Material não deve conter a palavra “Papel” em seu início.
Revelar gabarito e comentário▾
GabaritoD — deve ser diferente de “Abc” e o Material não deve apresentar sequência que contenha a palavra “Papel” em seu início.
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”.
Consultas SQL: operadores NOT IN e LIKE
Gabarito: letra D. A consulta filtra registros da tabela Armario onde o Fabricante não seja exatamente 'Abc' (operador NOT IN) e o Material não comece com a palavra 'Papel' (operador NOT LIKE 'Papel%'). A alternativa D é a única que traduz corretamente ambos os operadores, pois o % no padrão LIKE representa qualquer sequência de caracteres, e quando posicionado após 'Papel', restringe a busca a valores que iniciem com essa palavra.
O comando SQL apresentado utiliza dois operadores de filtragem na cláusula WHERE, que são fundamentais para a construção de consultas em bancos de dados relacionais. O primeiro, NOT IN, é usado para excluir registros cujo valor de um atributo esteja em uma lista específica. No caso, Fabricante NOT IN ('Abc') significa que serão retornados apenas os registros cujo valor do atributo Fabricante seja diferente de 'Abc'. É importante notar que o NOT IN faz uma comparação de igualdade exata — o valor do campo deve ser exatamente 'Abc' para ser excluído; se o fabricante for 'Abcd' ou 'XAbc', ele não será excluído por essa condição.
O segundo operador, NOT LIKE, é utilizado para filtrar registros com base em um padrão de texto. O LIKE (e sua negação NOT LIKE) usa os caracteres curinga % (qualquer sequência de caracteres, inclusive vazia) e _ (um único caractere). No comando, Material NOT LIKE ('Papel%') significa que serão retornados apenas os registros cujo valor do atributo Materialnão comece com a sequência 'Papel'. O % após 'Papel' indica que qualquer continuação é aceita, mas a palavra deve estar no início do valor. Por exemplo, 'Papelaria' ou 'Papel sulfite' seriam excluídos, mas 'Papelão' também seria excluído, pois começa com 'Papel'. Já 'Cartolina' ou 'Papel de presente' (se começar com 'Papel') seriam excluídos, mas 'Papel de parede' também. Valores como 'Papel' exato também seriam excluídos, pois o % pode representar uma sequência vazia.
A pegadinha clássica desta questão está em confundir o comportamento do LIKE com o %. Muitos candidatos interpretam LIKE '%Papel%' (que busca 'Papel' em qualquer parte) com LIKE 'Papel%' (que busca apenas no início). A posição do % é crucial: 'Papel%' fixa o início, '%Papel' fixa o final, e '%Papel%' busca em qualquer posição. Além disso, o NOT IN é frequentemente confundido com uma busca por substring, mas ele faz uma comparação de igualdade exata com cada item da lista.
Para fixar o entendimento, considere a tabela Armario com os seguintes registros:
Cod
Material
Fabricante
1
Papel A4
Abc
2
Papel A4
Xyz
3
Cartolina
Abc
4
Cartolina
Xyz
5
Papelão
Abc
6
Papelão
Xyz
Aplicando a consulta WHERE Fabricante NOT IN ('Abc') AND Material NOT LIKE ('Papel%'), o resultado seria apenas o registro 4 (Cartolina, Xyz). Os registros 1, 3 e 5 são excluídos pelo NOT IN (fabricante 'Abc'); os registros 2 e 6 são excluídos pelo NOT LIKE (material começa com 'Papel'). O registro 4 atende a ambas as condições.
Agora, vamos analisar cada alternativa, focando no erro específico de cada uma:
Operadores SQL: NOT IN ('Abc') (igualdade exata, diferente de 'Abc'); NOT LIKE 'Papel%' (% = qualquer sequência, não começa com 'Papel'); Posição do % ('Papel%' → início, '%Papel' → final, '%Papel%' → qualquer parte)
Alternativa A — ❌ Incorreta
Afirma que o Material "não deve incluir a palavra 'Papel' em qualquer parte de sua composição". Isso descreve o comportamento de NOT LIKE '%Papel%', não de NOT LIKE 'Papel%'. O comando original apenas exclui materiais que começam com 'Papel', permitindo que a palavra apareça em outras posições (ex.: 'Cartolina de Papel'). A alternativa erra ao generalizar a restrição para qualquer parte do texto.
Alternativa B — ❌ Incorreta
Afirma que o Material "deve apresentar sequência que não inclua o caractere '%'". Isso é um erro conceitual: o % na cláusula LIKE é um caractere curinga, não um caractere literal a ser buscado. A consulta não verifica se o valor contém o símbolo '%', mas sim se o valor começa com a palavra 'Papel'. A alternativa confunde a sintaxe do operador com o dado armazenado.
Alternativa C — ❌ Incorreta
Afirma que o Fabricante "não deve conter a sequência 'Abc' em qualquer parte de sua composição". Isso descreve o comportamento de NOT LIKE '%Abc%', não de NOT IN ('Abc'). O NOT IN faz uma comparação de igualdade exata: apenas o valor 'Abc' é excluído, mas 'XAbc' ou 'AbcX' seriam mantidos. Além disso, afirma que o Material "não terminar com a palavra 'Papel'", o que corresponderia a NOT LIKE '%Papel', não a NOT LIKE 'Papel%'. A alternativa erra em ambos os operadores.
Alternativa D — ✅ Correta ⟵ GABARITO
Traduz corretamente os dois operadores: o Fabricante "deve ser diferente de 'Abc'" (igualdade exata do NOT IN) e o Material "não deve apresentar sequência que contenha a palavra 'Papel' em seu início" (posição do % no NOT LIKE 'Papel%'). A alternativa espelha exatamente o comportamento da consulta SQL apresentada.
Alternativa E — ❌ Incorreta
Afirma que o Fabricante "não deve conter a sequência 'Abc' em qualquer parte de sua composição", o que, como visto, descreve NOT LIKE '%Abc%', não NOT IN ('Abc'). Embora acerte a parte do Material ("não deve conter a palavra 'Papel' em seu início"), o erro no primeiro operador torna a alternativa incorreta.
A distinção central que separa as alternativas é a posição do curinga % e a natureza exata do NOT IN. Guarde: NOT IN compara igualdade exata; LIKE 'Papel%' fixa o início; LIKE '%Papel' fixa o final; LIKE '%Papel%' busca em qualquer posição.
NÃO CAIA NESSA!
A banca explora a confusão entre NOT IN (igualdade exata) e NOT LIKE '%...%' (substring em qualquer posição). Nas alternativas C e E, o Fabricante é descrito como "não conter a sequência 'Abc' em qualquer parte", o que seria o comportamento de NOT LIKE '%Abc%', não de NOT IN ('Abc'). Além disso, a posição do % no LIKE é decisiva: 'Papel%' (início) é diferente de '%Papel' (final) e de '%Papel%' (qualquer posição). Com treino, você enxerga essas trocas de longe 💪.
PEGA ESSA DICA!
Para questões com LIKE, identifique a posição do % e traduza mentalmente: 'X%' = começa com X; '%X' = termina com X; '%X%' = contém X. Para IN/NOT IN, lembre-se de que é uma comparação de igualdade exata com a lista. Monte uma tabela mental: