Uma empresa de investimentos financeiros busca identificar novas oportunidades de negócio para pessoas jurídicas, em especial dentre aquelas que têm como característica a adoção de governança ambiental, social e corporativa (conhecida como ESG, uma sigla em inglês). Considere que existe um banco de dados nessa empresa com as seguintes tabelas (todas as chaves primárias são numéricas): Empresa (CNPJ, razaoSocial, endereco) Caracteristica (cod, sigla, nome) Tem (CNPJ, cod) Que comando SELECT do SQL retorna apenas o CNPJ e a razão social das empresas que não têm "ESG" como característica?
- A)SELECT * FROM Empresa WHERE Caracteristica.Sigla <> 'ESG'
Errada, porque SELECT * traz todas as colunas e ainda tenta usar Caracteristica.Sigla sem JOIN, o que nao filtra corretamente as empresas sem ESG.
- B)SELECT E.CNPJ, E.razaoSocial FROM Empresa E JOIN Tem T ON (E.CNPJ = T.CNPJ) WHERE Tem.cod = 'ESG'
Errada, porque faz JOIN com Tem e ainda compara Tem.cod com 'ESG', mas cod é chave numerica e nao a sigla textual da caracteristica.
- C)SELECT E.CNPJ, E.razaoSocial FROM Empresa E JOIN Tem T ON (E.CNPJ = T.CNPJ) JOIN Caracteristica C ON (C.cod = T.cod) WHERE C.nome <> 'ESG'
Errada, porque compara C.nome com 'ESG', mas o campo ESG aparece como sigla, nao como nome, entao o filtro está incorreto.
- D)SELECT E.CNPJ, E.razaoSocial FROM Empresa E WHERE E.CNPJ NOT IN ( SELECT T.CNPJ FROM Tem T JOIN Caracteristica C ON (T.cod = C.cod) WHERE C.sigla = 'ESG' )
Certa, porque exclui da tabela Empresa os CNPJs que aparecem associados à sigla ESG na subconsulta.
- E)SELECT Empresa.* FROM Empresa, Tem WHERE Empresa.CNPJ = Tem.cod AND Tem.cod <> 'ESG'
Errada, porque confunde CNPJ com cod no JOIN e ainda usa Tem.cod <> 'ESG', comparando chave numerica com texto.
Gabarito: D
A ideia aqui é filtrar empresas que nao estejam associadas a uma caracteristica específica, no caso ESG. Em SQL, quando voce quer trazer registros “sem relacao” com algo, costuma usar uma subconsulta com NOT IN, NOT EXISTS ou uma operacao equivalente. O ponto central é: primeiro voce identifica quais CNPJs aparecem ligados a ESG, e depois exclui esses CNPJs do resultado final. No enunciado, a tabela Tem faz a ligacao entre Empresa e Caracteristica. Então nao basta olhar só a empresa ou só a sigla isoladamente: é preciso juntar Tem com Caracteristica para descobrir quais registros de Tem correspondem à sigla ESG. A partir daí, a consulta externa pega apenas CNPJ e razaoSocial da tabela Empresa e remove os que estao na lista da subconsulta. Por isso, a alternativa D está correta. Ela faz exatamente isso: a subconsulta retorna os CNPJs das empresas que possuem a caracteristica ESG, e o SELECT externo usa NOT IN para excluir esses CNPJs. Resultado: aparecem apenas as empresas que nao têm ESG como caracteristica. Um cuidado classico de prova é nao confundir nome, sigla e cod, nem tentar comparar colunas de tabelas diferentes sem o JOIN adequado. Em SQL, a logica manda mais que a pressa: primeiro descubra quem está na lista proibida, depois tire do resultado. Aqui, a banca quer justamente essa leitura de conjunto.