title: "SELECT TOP 1 1" VS "IF EXISTS(SELECT 1"
body: <p>I have some .NET code that checks for the existence of a SQL record at a moderately-high interval.  I am looking to make this check as "cheap" as possible.</p>
  
  <p>I'm wondering the characteristics of two queries:</p>
  
  <pre><code>IF EXISTS(SELECT 1
            FROM   BigTable
            WHERE  SomeColumn = 200)
    SELECT 1 AS FOUND
  ELSE
    SELECT 0 AS FOUND
  </code></pre>
  
  <p>VS</p>
  
  <pre><code>SELECT TOP 1 1
  FROM   BigTable
  WHERE  SomeColumn = 200 
  </code></pre>
  
  <p>They both produce similar execution plans.  But the SELECT TOP 1 1 seems to execute faster: Less query to parse and when record is not found, it sends less down the pipe.  I'm also assuming it runs faster at the client because I just need to check the Record Count, rather than marshaling the return value of IF EXISTS.</p>
  
  <p>Most of the performance benefits are negligible.  But if both consistently return the same result, then why not choose the <em>slightly</em> faster method?</p>
  
  <p>Is "SELECT TOP 1 1" THEE best way to check for an existence of a record in .NET?</p>
  
  <p>(We use .NET 3.5, and I am trying to avoid LINQ because it is not used elsewhere in the application.  We also have some legacy VB6 apps that we are migrating/rewriting, so they may need to execute this as well.)</p>
  
  <p>EDIT:
  Just a little more detail on design.  This record is a "header".  There is another table that has child records that will be read/parsed when this header is found.  The lack of a record is a good thing: there is no work to do.</p>
  
  <p>EDIT2: The lack of a record that meets the condition will occur more often.  They come in sporadic waves.</p>