|
Posted by Erland Sommarskog on 06/25/05 12:05
Ira Gladnick (IraGladnick@yahoo.com) writes:
> Why worse?
>
> The common wisdom seems to be that it is always more efficient
> eliminate nested subqueries, if possible.
It's worse, becase it does not express the intent of the query equally
well, and therefore can contribute to higher maintenance costs.
> My understanding is that the optimizer will internally eliminate the
> subquery by doing a left join as above if it can.
I don't know if this is the case, but in such case there is even less
reason to rewrite the query in an obscure way.
I would write the query as:
Select serialnumber
from tbl_test2 t2
where not exists (select *
from tbl_test t
where t2.serialnuber = t.serialnumber)
and exportedflag=0
In SQL 6.5 this would typically perform better than NOT IN. But I believe
SQL 2000 will rewrite NOT IN to NOT EXISTS internally, so it is not that
much of an issue for performance. But NOT EXISTS is more general to use
than NOT IN, because you can handle multi-column conditions. Furthermore,
if there are NULL values involved, NOT IN can give you surpriese.
--
Erland Sommarskog, SQL Server MVP, esquel@sommarskog.se
Books Online for SQL Server SP3 at
http://www.microsoft.com/sql/techinfo/productdoc/2000/books.asp
[Back to original message]
|