sql >> Base de Datos >  >> RDS >> Oracle

el comportamiento de la unión interna dentro existe sql

La diferencia es que cuando usas exists - la consulta interna generalmente depende de la consulta principal (es decir, usa columnas de ella y, por lo tanto, no se puede ejecutar por separado) y, por lo tanto, para cada fila de la consulta principal, verifica si existen o no algunos datos recuperados por la subconsulta. /P>

El problema de su primera consulta es que la subconsulta dentro del bloque existe no depende de las columnas de la consulta principal, es una consulta separada que siempre devuelve una fila con 1 , entonces, para cualquier fila de la consulta principal, el resultado de exists será siempre true . Entonces, su primera consulta es equivalente a

SELECT distinct(company_id)
FROM user
WHERE user.user_id = 123 
AND user.company_id IS NOT NULL

Ver también fiddle