Есть странное поведение, которое сводит меня с ума.
У меня есть таблица пользователей и таблица разрешений в старой базе данных SQL Server 2000.Эта база данных беспорядочная, во многих таблицах нет PK и нет связей между таблицами ... но я не мог это исправить (и, честно говоря, я не думаю, что это связано с моей проблемой).
Users:
IDRecord -> PK money
-- other fields
Permissions:
IDRecord -> money (is not a PK)
IDUser -> money (refers to Users.IDRecord WITHOUT FK)
Function -> varchar
-- other fields
Я хочу получить идентификаторы пользователей без какого-либо разрешения.
Мой первый подход был написать что-то вроде:
select distinct IDRecord
from Users
where IDRecord not in (
select IDUser from Permissions
)
, которое не возвращает мне строк.
Но я ЗНАЮ, что есть пользователи без разрешений, поэтому я пишу второй запрос:
select distinct U.IDRecord
from Users U
left join Permissions P
on P.IDUser = U.IDRecord
where P.IDRecord is null
, который корректно возвращает пользователей без разрешений.
Итак, в чем проблема??
Почему первый не работает?