EXCEPT vs NOT IN in SQL Server

EXCEPT” operator was introduced in SQL SERVER 2005. This operator used to achieve Distinct and Not In queries.EXCEPT operator returns all distinct rows from left hand side table which does not exist in right hand side table.

On the other hand “NOT IN” will return all rows from left hand side table which are not present in right hand side table but it will not remove duplicate rows from the result.

Example of EXCEPT vs NOT IN in SQL SERVER

 Collapse | Copy Code
create table #tblsample (ProductId tinyint)
create table #tblsample2 (ProductId tinyint)

--insert values to tbl 1
insert into #tblsample values (1)
insert into #tblsample values (2)
insert into #tblsample values (3)
insert into #tblsample values (4)

--insert values to tbl 2
insert into #tblsample2 values (1)

--SELECT
select * from #tblsample
select * from #tblsample2

--USE EXCEPT
select * from #tblsample
except
select * from #tblsample2

--USE NOT IN
select * from #tblsample
where productid NOT IN(
select * from #tblsample2)

 Collapse | Copy Code
-- INSERT DUBLICATE VALUE
insert into #tblsample values (1)
insert into #tblsample values (2)

--SELECT
select * from #tblsample
--USE EXCEPT
PRINT 'EXCEPT RETURNS DISTINCT VALUES'
select * from #tblsample except select * from #tblsample2
--USE NOT IN
PRINT 'NOT IN RETURNS DUPLICATE VALUES IF ANY'
select * from #tblsample where productid NOT IN(select * from #tblsample2)

--USE DISTINCT + NOT IN = EXCEPT

select * from #tblsample
except
select productid from #tblsample2

 Collapse | Copy Code
--DROP TABLE
DROP TABLE #tblsample
DROP TABLE #tblsample2
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s