AS T1
WHERE NOT EXISTS (SELECT GoodTypeID FROM [Egorka_TorgSoftDB].[dbo].[GoodType] AS T2 WHERE T2.GoodTypeID = T1.ID) , а так нет: SELECT *
FROM [Egorka_TorgSoftDB].[dbo].[GoodType]
WHERE ID NOT IN (SELECT GoodTypeID FROM [Egorka_TorgSoftDB].[dbo].[GoodType]) ? При том что если из обеих запросов убрать NOT - они отработают одинаково правильно.
Скорее всего в значениях есть NULL. IN обрабатывает трехзначную логику: 1 IN (2, null) --> FALSE, т.к. 1 = 2 --> false 1 = null --> unknown false OR unknown --> unknown (!= true) 1 NOT IN (2, null) --> FALSE, т.к. not(1 = 2) --> true not(1 = null) --> not(unknown) --> unknown true AND unknown --> unknown ( != true) NOT IN сработает как ожидаете, если например null значения обернуть в NVL(ID, -1). Или left outer join с условием is null Подробнее: http://www.dbatodba.com/sql-server/how-tos/typical-solutions-to-avoid-using-not-in-on-sql-server/ https://weblogs.sqlteam.com/mladenp/2007/05/18/60210/
да, так и есть. спасибо!
Потому что ты не умеешь писать запросы
В подзапросах есть null'ы?
Обсуждают сегодня