С времянкой и апдейтом - четыре
CREATE TABLE #t ( ID int, CONSTRAINT t_Q UNIQUE ( ID ), exclude int default(0) )
INSERT #t ( Id )
SELECT ID FROM table1 WHERE size > 3
UPDATE t1
set exclude = 1
FROM #t t1
INNER JOIN table2 t2 ON t1.ID = t2.ID
SELECT * FROM #t WHERE exclude = 0
DROP TABLE #t
/*
Table '#t_______0000000000E6'. Scan count 0, logical reads 238547, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'table1'. Scan count 1, logical reads 164, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
(79167 row(s) affected)
(1 row(s) affected)
Table '#t______0000000000E6'. Scan count 1, logical reads 64664, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'table2'. Scan count 1, logical reads 109, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
(64485 row(s) affected)
(1 row(s) affected)
(14682 row(s) affected)
Table '#t_____0000000000E6'. Scan count 1, logical reads 167, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
(1 row(s) affected)
*/