Предполагая, что вы обращаетесь к таблицам, а не к представлениям, это произойдет, только если STUDENTS.STUDENT_ID
и PROVIDES_STD.STD_VALUE
имеют разные типы, один номер и один строка.
Я не фанат NOT IN
с подзапросом, потому что он не работает интуитивно при наличии NULL
с.Итак, я бы сформулировал запрос с явным преобразованием:
SELECT S.*
FROM STUDENTS S
WHERE NOT EXISTS (SELECT 1
FROM PROVIDERS_STD P
WHERE TRY_CONVERT(INT, P.STD_VALUE) = S.STUDENT_ID AND
P.STD_TYPE = 'STUDENT'
);
Обратите внимание, что я преобразовываю в число, а не в строку.Всего пару недель назад я заметил ошибку в каком-то коде.,,из-за заполнения нулями строковых значений в аналогичной ситуации.