Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

comportamento da junção interna dentro do sql existe


A diferença é que quando você usa exists - a consulta interna geralmente depende da consulta principal (a média usa colunas dela e, portanto, não pode ser executada separadamente) e, portanto, para cada linha da consulta principal ele verifica se algum dado recuperado pela subconsulta existe ou não.

O problema da sua primeira consulta é que a subconsulta dentro do bloco existe não depende das colunas da consulta principal, é uma consulta separada que sempre retorna uma linha com 1 , portanto, para qualquer linha da consulta principal, o resultado de exists será sempre true . Então, sua primeira consulta é equivalente a
SELECT distinct(company_id)
FROM user
WHERE user.user_id = 123 
AND user.company_id IS NOT NULL

Veja também violino