where prServiceLine<>a.ServiceLine
если prServiceLine равен нулю или a.ServiceLine равен нулю, то результатом условия является ноль, а не логическое значение
проверить это:
declare @x int, @y int
if @x<>@y print 'works'
if @x=@y print 'works!'
set @x=1
if @x<>@y print 'not yet'
if @x=@y print 'not yet!'
set @y=2
if @x<>@y print 'maybe'
if @x=@y print 'maybe!'
Выход:
maybe
вы никогда не увидите «работает», «работает!», «Еще нет» или «еще нет!» получить вывод. Только «Возможно» («возможно!», Если они оба были равны).
вы не можете проверить нулевые значения с помощью! =, = Или <>, вам нужно использовать ISNULL (), COALESCE, NOT NOT NULL или IS NULL в вашем WHERE, если одно из значений, которые вы тестируете, NULL.