Are the column names are the same in both tables? If not, the subquery could just be parroting back each ProductsToAdd.SKU back to the select statement. Here's an example from oracle that demostrates this:
<FONT face="courier new,courier">create table prod(sku varchar2(30) not null);
insert into prod(sku) values('ABC-1');
insert into prod(sku) values('ABC-2');
insert into prod(sku) values('ABC-3');
insert into prod(sku) values('ABC-4');
insert into prod(sku) values('ABC-5');</FONT>
<FONT face="courier new,courier">rem Create newprod table with different name for sku columns.... </FONT>
<FONT face="courier new,courier">
create table newprod(sku_code varchar2(30) not null);
insert into newprod(sku_code) values('ABC-6');
insert into newprod(sku_code) values('ABC-7');
insert into newprod(sku_code) values('ABC-8');
insert into newprod(sku_code) values('ABC-9');
rem select with accidental reference to newprod's sku_code column in prod subquery</FONT>
<FONT face="courier new,courier">select * from newprod
where sku_code not in (select sku_code from prod);</FONT>
<FONT face="courier new,courier">SKU_CODE
------------------------------ </FONT>
<FONT face="courier new,courier">0 rows selected</FONT>
Note the select on the bottom is a lot like yours, and also returns zero rows despite there being data. The prod table does not contain a sku_code column, so the subquery is returning the sku_code column from the newprod table for each row in the prod table.
This could also happen if the SKU column in the subquery is prefixed with the table alias for the main select statement (always a typo). EG:
<FONT face="courier new,courier">select pta.sku from ProductsToAdd as pta where pta.sku not in (select pta.sku from Products as prod) </FONT>