Я создал несколько запросов и не могу понять, почему результаты не соответствуют ожиданиям.
Я не понимаю, почему Query II и III не возвращают одинаковые результаты.Я ожидаю, что запрос II будет возвращать все строки, не выбранные Query I.
Я бы ожидал, что Query II и III дадут одинаковые результаты.На мой взгляд, результаты III правильные.
Я уверен, что что-то упустил, я просто не знаю, что.
Пример:
Таблица:
CREATE TABLE [dbo].[TestTable](
[TestTableId] [int] NOT NULL,
[ValueA] [int] NULL,
[ValueB] [int] NULL
) ON [PRIMARY]
Данные:
TestTableId ValueA ValueB
1 10 5
2 20 5
3 10 NULL
4 20 NULL
5 NULL 10
6 10 10
7 NULL NULL
Запросы:
Все записи: выберите * из TestTable
I.Запрос выбора:
select * from TestTable
where (ValueA = 10 or ValueA = 20) AND ValueB = 5
Результат:
TestTableId ValueA ValueB
1 10 5
2 20 5
II.Тот же запрос, но НЕ
select * from TestTable
where NOT ((ValueA = 10 or ValueA = 20) AND ValueB = 5)
Результат:
TestTableId ValueA ValueB
5 NULL 10
6 10 NULL
III.Тот же запрос, что и второй (я бы подумал)
select * from TestTable where TestTable.TestTableId not in
(select TestTableId from TestTable
where (ValueA = 10 or ValueA = 20) AND ValueB = 5)
Результат:
TestTableId ValueA ValueB
3 10 NULL
4 20 NULL
5 NULL 10
6 10 10
7 NULL NULL