100% уверен, что первое условие из оператора ИЛИ в
JOIN будет выполняться первым?
Нет. Не существует гарантированного порядка вычисления, и даже если там, где все выражение будет по-прежнему иметь одно и то же значение, это не повлияет на соответствие строк в объединении.
Ваш запрос даст такой результат:
Name Percentage
---------- -----------
P-A 100
P-A 20
P-A 80
P-B 100
Полагаю, вы ищете что-то подобное.
select P.Name,
coalesce(D1.Percentage, D2.Percentage) as Percentage
from Personnel as P
left outer join Department as D1
on P.Dep_Code = D1.Code and
P.SubDep_Code = D1.SubCode
left outer join Department as D2
on P.Dep_Code = D2.Code and
D2.SubCode = '*'
where coalesce(D1.Percentage, D2.Percentage) is not null
Вы можете попробовать запросы здесь, используя SQL Server 2008. http://data.stackexchange.com/stackoverflow/qt/118492/