Thanks for the nice question with plenty of knowledge involved, but I've got it just because none of the above made sense for me, and the explanation is not 100% correct as even if we have 5 Null values in the table, the operator EXCEPT will act as explained in BOL:
EXCEPT returns any distinct values from the left query that are not also found on the right query.
So it will never ever return 5 rows, if NULL values come to play, there will be just one row with NULL value in it.
declare @t table (numericColumn int)
insert into @t values (-10)
insert into @t values (-9)
insert into @t values (-8)
insert into @t values (-7)
insert into @t values (-6)
insert into @t values (-5)
insert into @t values (-4)
insert into @t values (-3)
insert into @t values (-2)
insert into @t values (-1)
insert into @t values (0)
insert into @t values (1)
insert into @t values (2)
insert into @t values (3)
insert into @t values (4)
insert into @t values (5)
insert into @t values (6)
insert into @t values (null)
insert into @t values (null)
insert into @t values (null)
insert into @t values (null)
insert into @t values (null)
SELECT *
FROM @t
EXCEPT
SELECT *
FROM @t
WHERE NOT (NumericColumn BETWEEN -1 AND -10);
Cheers