Ошибка не в части NOT IN
, а в этом:
THEN SOURCE .source_id IN (SELECT DISTINCT sl.source_id
FROM sourcelevel SL)
Я не знаю о PostgreSQL, но SQL Server определенно не поддерживает это условие:
WHERE 1 = SOURCE.source_id IN (SELECT..
Тщательно анализируя ваш запрос ..
SELECT *
FROM source
WHERE 1 = (CASE WHEN 234 NOT IN(SELECT user_id FROM usergroup)
THEN SOURCE.source_id IN (SELECT DISTINCT sl.source_id FROM sourcelevel AS SL)
ELSE 1
END)
Похоже, что запрос просто ограничивает результат запроса, если идентификатор пользователя не входит в группу пользователей.
Замена CASE
на IF
(потому что CASE
не будет работать как внешняя часть запроса)
IF (SELECT user_id FROM usergroup WHERE user_id = 234) IS NULL
BEGIN
SELECT *
FROM source
WHERE source.source_id IN (SELECT DISTINCT sl.source_id FROM sourcelevel AS SL)
END
ELSE BEGIN
SELECT * FROM source
END