1
resposta

Aplicando o comando EXISTS

As questões B e C retornam exatamente o mesmo resultset. Porque a questão diz que na opção C: "O uso do parâmetro do EXISTS está errado." ??

A única diferença é que na questão C retorna dados de uma coluna sem necessidade.

QUESTÃO B

SELECT DISTINCT TF.NOME_FUNCIONARIO
FROM TAB_FUNCIONARIO TF
WHERE EXISTS
(SELECT 1 FROM TAB_DEPENDENTE TD
WHERE TF.COD_FUNCIONARIO = TD.COD_FUNCIONARIO);

QUESTÃO C

SELECT DISTINCT TF.NOME_FUNCIONARIO
FROM TAB_FUNCIONARIO TF
WHERE EXISTS
(SELECT TD.COD_FUNCIONARIO FROM TAB_DEPENDENTE TD
WHERE TF.COD_FUNCIONARIO = TD.COD_FUNCIONARIO);
1 resposta

Oii, Ceilton! Tudo bom?

Na questão B, o subquery SELECT 1 FROM TAB_DEPENDENTE TD WHERE TF.COD_FUNCIONARIO = TD.COD_FUNCIONARIO usa SELECT 1, uma prática comum com EXISTS. Isso ocorre porque este parâmetro só verifica se há linhas que atendem à condição, sem se importar com os valores retornados, basta que a condição seja verdadeira.

Já na questão C, o subquery SELECT TD.COD_FUNCIONARIO FROM TAB_DEPENDENTE TD WHERE TF.COD_FUNCIONARIO = TD.COD_FUNCIONARIO especifica uma coluna, o que não é necessário para o EXISTS. Então, nesse contexto, embora esteja sintaticamente correto, não é a forma mais eficiente ou usual, já que o EXISTS só precisa de um retorno qualquer para funcionar.

Para mais informações sobre o parâmetro EXISTS, recomendo este artigo.

Espero ter sanado a sua dúvida, conte sempre consoco.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado!