Using "NOT IN" should carefully consider the possibility of NULL values, else the results will be incorrect.
/*----------------------------------------------------------------------------- Date : 23 March 2011 SQL Version : SQL Server 2005/2008/Denali Author : Jacob Sebastian Email : jacob@beyondrelational.com Twitter : @jacobsebastian Blog : http://beyondrelational.com/blogs/jacob Website : http://beyondrelational.com Summary: This script is part of the demo presented by Jacob Sebastian during Tech-ED India 2011 on "TSQL Worst Practices". Disclaimer: THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE. -----------------------------------------------------------------------------*/ USE teched GO IF OBJECT_ID('target') IS NOT NULL BEGIN DROP TABLE target END GO CREATE TABLE target ( PostID INT, Title VARCHAR(100) ) GO IF OBJECT_ID('source') IS NOT NULL BEGIN DROP TABLE source END GO CREATE TABLE source ( PostID INT, Question VARCHAR(100), ) GO INSERT INTO source (PostID, Question) SELECT 1, 'What is denali?' INSERT INTO source (PostID, Question) SELECT 2, 'What is Crescent?' INSERT INTO target (PostID, Title) SELECT 1, 'What is denali?' INSERT INTO target (PostID, Title) SELECT 3, 'What is Apollo?' INSERT INTO target (PostID, Title) SELECT 4, 'What is Atlanta?' INSERT INTO target (Title) SELECT 'Welcome to Silverlight' SELECT * FROM source SELECT * FROM target