Questão FC295892
Um funcionário de TI recebeu a tarefa de identificar corretamente quais pessoas físicas, cadastradas na tabela PESSOA_FISICA, ainda não eram clientes, pois não estavam cadastradas
Linguagem SQL
CESGRANRIO · 2022
Considere que em um banco de dados de um banco comercial há duas tabelas:
PESSOA_FISICA (CPF, nome, email, telefone)
CLIENTE (CPF, nome, email, telefone).
Um funcionário de TI recebeu a tarefa de identificar corretamente quais pessoas físicas, cadastradas na tabela PESSOA_FISICA, ainda não eram clientes, pois não estavam cadastradas na tabela CLIENTE. Para isso, ele utilizou um comando SELECT em SQL. Que trecho, em SQL, faz parte de uma das possíveis soluções para essa tarefa?
- … WHERE PESSOA_FISICA.CPF NOT IN (SELECT CPF FROM CLIENTE…
- … HAVING PESSOA_FISICA.CPF != CLIENTE.CPF…
- … WHERE PESSOA_FISICA.CPF <> CLIENTE.CPF...
- … DISTINCT PESSOA_FISICA.CPF FROM CLIENTE WHERE ...
- … IN PESSOA_FISICA BUT NOT IN CLIENTE...
Mostrar resposta e comentário
Gabarito
A
Comentário do professor
A expressão WHERE PESSOA_FISICA.CPF NOT IN (SELECT CPF FROM CLIENTE) filtra as pessoas físicas cujo CPF não pertence ao conjunto retornado pelo SELECT interno. Ou seja, o subselect obtém todos os CPFs já cadastrados em CLIENTE e a cláusula NOT IN seleciona apenas as linhas de PESSOA_FISICA cujo CPF não está nesse conjunto — exatamente o objetivo de listar pessoas físicas que ainda não são clientes.
Importante: se o subselect retornar algum NULL, a comparação com NOT IN pode acarretar em resultado vazio por causa da lógica de três valores do SQL. Para evitar esse problema, assegure que o subselect exclua NULLs (por exemplo, WHERE CPF IS NOT NULL) ou use outras abordagens seguras como NOT EXISTS ou LEFT JOIN ... IS NULL.
Conteúdo do catálogo FC Concursos · Atualizado em