Exists / not exists: 'select 1' vs 'select field'

Yes, they are the same. exists checks if there is at least one row in the sub query. If so, it evaluates to true. The columns in the sub query don't matter in any way.

According to MSDN, exists:

Specifies a subquery to test for the existence of rows.

And Oracle:

An EXISTS condition tests for existence of rows in a subquery.

Maybe the MySQL documentation is even more explaining:

Traditionally, an EXISTS subquery starts with SELECT *, but it could begin with SELECT 5 or SELECT column1 or anything at all. MySQL ignores the SELECT list in such a subquery, so it makes no difference.


I know this is old,but want to add few points i observed recently..

Even though exists checks for only existence ,when we write "select *" all ,columns will be expanded,other than this slight overhead ,there are no differences.

Source:
http://www.sqlskills.com/blogs/conor/exists-subqueries-select-1-vs-select/

Update:
Article i referred seems to be not valid.Even though when we write,select 1 ,SQLServer will expand all the columns ..

please refer to below link for in depth analysis and performance statistics,when using various approaches..

Subquery using Exists 1 or Exists *