Запрос верный, если table_B не имеет столбца с именем ID_NO, но table_A имеет. Тогда у вас будет коррелированный подзапрос, где подзапрос выбирает ID_NO, ссылается на внешний ID_NO-атрибут table_A (по-видимому, не имеет смысла, но подходит для компилятора).
Рассмотрим следующую схему:
create table table_a (
id_no int
);
create table table_b (
other_id_no int
);
insert into table_a values (1),(2);
insert into table_b values (1),(3);
Затем, следующий запрос будет компилировать; но он всегда будет давать пустой результат, потому что на самом деле означает что-то вроде где id_no не в (id_no):
select * from table_a where id_no not in (select id_no from table_b);
Когда имеешь дело с подзапросов, я предложил бы использовать псевдонимы таблиц для того, чтобы избежать такого непреднамеренного поведения , Например, следующий запрос не компилируется, и компилятор дает подсказку, что это не так:
select * from table_a a where a.id_no not in (select b.id_no from table_b b);
Error: Unknown column 'b.id_no' in 'field list'
Исправление ошибки затем приводит к:
select * from table_a a where a.id_no not in (select b.other_id_no from table_b b);
просьба представить таблицу stucture – Jens
это правильно запрос, если ID_NO из table_A имеет другой тип в ID_NO из table_B, это вызовет проблему с другими способами. –