Seja um banco de dados relacional especificado em SQL de uma
empresa de correspondência entre clientes, instituições
financeiras e empréstimos contratados por esses clientes nessas
instituições, previamente implementado em um banco de dados
como a seguir:
OBS: Neste banco de dados, cadeias de caracteres (strings) são
representadas envoltas em aspas simples.
Para que a consulta a seguir reflita o resultado dos clientes cadastrados que não contrataram empréstimos, qual a opção que corretamente substitui o trecho na cláusula from do comando SQL, padrão ANSI, destacado como /* TERMO */ ?
Ainner
Bleft
Cnatural
Douter
Eright
Revelar gabarito e comentário▾
GabaritoE — right
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”.
Junções SQL: INNER, LEFT, RIGHT e FULL OUTER JOIN
Gabarito: letra E. Para retornar os clientes cadastrados que não contrataram empréstimos, a consulta precisa preservar todos os registros da tabela de clientes (lado esquerdo da junção) e trazer os dados de empréstimos apenas quando houver correspondência — é exatamente o que o LEFT JOIN faz. A alternativa E (right) está correta porque, na sintaxe FROM clientes RIGHT JOIN emprestimos, a tabela clientes é a tabela da direita, e o RIGHT JOIN retorna todos os registros da tabela da direita, preenchendo com NULL os campos da tabela da esquerda quando não há correspondência.
O comando JOIN combina registros de duas ou mais tabelas com base em uma condição de junção. A família de junções externas (OUTER JOIN) é a que resolve o problema de "registros sem par": enquanto o INNER JOIN descarta qualquer linha que não tenha correspondência na outra tabela, as junções externas preservam as linhas sem par de uma ou de ambas as tabelas, preenchendo os campos faltantes com NULL. É essa preservação que permite identificar, por exemplo, clientes que não contrataram empréstimos: eles aparecem na tabela de clientes, mas não têm nenhuma linha correspondente na tabela de empréstimos.
A distinção central está em qual lado da junção é preservado. O LEFT JOIN (ou LEFT OUTER JOIN) retorna todos os registros da tabela à esquerda da cláusula FROM, mesmo que não haja correspondência na tabela à direita. O RIGHT JOIN (ou RIGHT OUTER JOIN) faz o oposto: retorna todos os registros da tabela à direita, mesmo sem correspondência na esquerda. O FULL OUTER JOIN preserva ambos os lados. O INNER JOIN (ou simplesmente JOIN) retorna apenas as interseções — os registros que possuem valores relacionados em ambas as tabelas.
Na consulta do enunciado, o objetivo é listar os clientes que não contrataram empréstimos. Isso significa que a tabela de clientes deve ser a base da consulta — todos os clientes devem aparecer, tenham ou não empréstimos. A tabela de empréstimos entra apenas para verificar se existe correspondência. Portanto, a tabela de clientes é o lado que deve ser preservado. Se a consulta está escrita como FROM clientes /* TERMO */ JOIN emprestimos, o termo que preserva a tabela da esquerda (clientes) é LEFT. Mas a alternativa correta é right — e isso só faz sentido se a ordem das tabelas na cláusula FROM for invertida: FROM emprestimos RIGHT JOIN clientes. Nessa configuração, a tabela clientes é a da direita, e o RIGHT JOIN a preserva integralmente.
A pegadinha da banca está exatamente aí: o candidato que decora "LEFT preserva a tabela da esquerda" sem verificar a ordem das tabelas na consulta marca left e erra. A questão exige que se identifique qual tabela precisa ser preservada (clientes) e qual posição ela ocupa na cláusula FROM (direita, após o JOIN). O RIGHT JOIN é a ferramenta certa para preservar a tabela da direita — e é isso que a alternativa E faz.
NÃO CAIA NESSA!
A banca inverte a ordem das tabelas na cláusula FROM. O candidato que decora "LEFT preserva a esquerda" sem olhar a posição real das tabelas marca left e erra. Aqui, a tabela clientes está à direita do JOIN, então o RIGHT JOIN é o que a preserva. Sempre verifique qual tabela precisa ser preservada e onde ela está na consulta.
Tipo de Junção
Tabela Preservada
Comportamento com Linhas sem Correspondência
Uso Típico
INNER JOIN
Nenhuma (apenas interseção)
Descarta linhas sem par em qualquer das tabelas
Retornar apenas registros com correspondência em ambas
LEFT JOIN
Tabela à esquerda do JOIN
Mantém todas as linhas da esquerda; campos da direita preenchidos com NULL
Listar todos os registros da tabela-base à esquerda
RIGHT JOIN
Tabela à direita do JOIN
Mantém todas as linhas da direita; campos da esquerda preenchidos com NULL
Listar todos os registros da tabela-base à direita
FULL OUTER JOIN
Ambas as tabelas
Mantém todas as linhas de ambos os lados; campos sem par preenchidos com NULL
Combinar todos os registros, com ou sem correspondência
JOIN (SQL ANSI): INNER (Só interseção, Descarta sem par); LEFT (preserva esquerda) (Sem par → NULL); RIGHT (preserva direita) (Sem par → NULL); FULL (preserva ambos) (Sem par → NULL); NATURAL (Junção por colunas homônimas)
Alternativa A — ❌ Incorreta
O INNER JOIN retorna apenas os registros que possuem correspondência em ambas as tabelas. Clientes sem empréstimos seriam descartados, pois não têm linha correspondente na tabela de empréstimos. O resultado não incluiria os clientes que não contrataram empréstimos — exatamente o oposto do que a consulta pede.
Alternativa B — ❌ Incorreta
O LEFT JOIN preserva a tabela da esquerda. Se a consulta fosse FROM clientes LEFT JOIN emprestimos, estaria correta. Mas, na ordem FROM emprestimos LEFT JOIN clientes, a tabela preservada seria emprestimos — e clientes sem empréstimos seriam descartados. A alternativa só seria válida se a ordem das tabelas fosse outra.
Alternativa C — ❌ Incorreta
O NATURAL JOIN é uma variação que faz a junção automaticamente pelas colunas com o mesmo nome nas duas tabelas, sem necessidade de cláusula ON. Ele se comporta como um INNER JOIN (ou LEFT/RIGHT/FULL quando combinado com OUTER), mas, isoladamente, NATURAL não é um tipo de junção completo — e, na prática, descarta linhas sem correspondência, o que não atende ao objetivo.
Alternativa D — ❌ Incorreta
OUTER sozinho não é um tipo de junção válido em SQL ANSI. As junções externas são LEFT OUTER JOIN, RIGHT OUTER JOIN e FULL OUTER JOIN. A palavra OUTER é opcional e sempre vem acompanhada de LEFT, RIGHT ou FULL. Usar apenas OUTER é sintaxe inválida.
Alternativa E — ✅ Correta ⟵ GABARITO
O RIGHT JOIN retorna todos os registros da tabela da direita. Na consulta FROM emprestimos RIGHT JOIN clientes, a tabela clientes é a da direita e será preservada integralmente. Clientes sem empréstimos aparecem com os campos de empréstimos preenchidos com NULL — e é exatamente esse conjunto que a consulta filtra para listar quem não contratou empréstimos.
A regra de ouro para questões de junção: identifique qual tabela precisa ter todas as suas linhas no resultado (a tabela-base) e verifique em qual lado da cláusula FROM ela está. Se estiver à esquerda, use LEFT; se estiver à direita, use RIGHT. O INNER descarta linhas sem par, e o FULL preserva ambos os lados.