Cita: El primer LEFT no traerá todos los registros de la primera tabla BASE1?
y mostrará información en la columna "t.Valor1" sólo cuando coincidan las clausulas
P.IDB1=t.IDB2 AND t.ValorK='C' AND p.CLIENT=t.CLIENT
El problema es que lo que tienes no son dos LEFT OUTER JOIN,
sino una consulta que relaciona tres tablas por LEFT OUTER JOIN...
No es lo mismo.
Cuando el DBMS procesa la sentencia toma la primera tabla y la cruza con la segunda, dando como resultado una tabla en memoria (se denomina tabla derivada), pero el proceso no termina allí: La tabla derivada se cruza con la tercera para dar el resultado final.
El problema se da cuando tienes un registro de la primera que no tiene correspondencia con la segunda. En ese caso el campo
t.CLIENT y el
t.VALOR contienen NULL, por lo que no se pueden cruzar con ningún dato de la tercera tabla. Ese registro de la primera tabla se podrá relacionar nunca con la tercera.
Esto es así,porque
NULL no es un dato, es la ausencia de datos. No puedes cruzar la
nada con
algo.
En el álgebra de SQL, cualquier operación realizada donde uno de sus valores sea NULL tendrá por resultado NULL, y por tanto no puede dar resultados en una tabla.
¿Se comprende la idea?
En síntesis: el resultado final no es el resultado de cada LEFT OUTER JOIN considerado separamente, sino de la relación de las tres tablas como unidad.
Cita: Y el segundo LEFT no seguirá mostrando todos los registros de la primera Unión que son los de la primera tabla BASE1??
No confundas JOIN con UNION. Son operaciones diferentes.