У меня есть таблица как под
declare @t table(bucket bigint null)
insert into @t select 1 union all select 2 union all select -1 union all select 5
Теперь позвольте мне написать следующий запрос (фильтр по сегменту 0 - все значения поступают)
declare @Bucket bigint = 0 –filter by 0
select * from @t
where 1=1
AND (@Bucket is Null or @Bucket ='' or bucket=@Bucket)
Result
1
2
-1
5
Но если я отфильтрую Bucket по 2 или любому другому значению, я получу результаты правильно
declare @Bucket bigint = 2 –filter by 2
select * from @t
where 1=1
AND (@Bucket is Null or @Bucket ='' or bucket=@Bucket)
Result
2
Если я отфильтрую по нулю или пробелу, я получу правильный результат
declare @Bucket bigint = '' –filter by ''
select * from @t
where 1=1
AND (@Bucket is Null or @Bucket ='' or bucket=@Bucket)
Result
1
2
-1
5
Почему это поведение для корзины 0? И как решить?