title: What's the difference between NOT EXISTS vs. NOT IN vs. LEFT JOIN WHERE IS NULL?
body: <p>It seems to me that you can do the same thing in a SQL query using either NOT EXISTS, NOT IN,  or LEFT JOIN WHERE IS NULL. For example:</p>
  
  <pre><code>SELECT a FROM table1 WHERE a NOT IN (SELECT a FROM table2)
  
  SELECT a FROM table1 WHERE NOT EXISTS (SELECT * FROM table2 WHERE table1.a = table2.a)
  
  SELECT a FROM table1 LEFT JOIN table2 ON table1.a = table2.a WHERE table1.a IS NULL
  </code></pre>
  
  <p>I'm not sure if I got all the syntax correct, but these are the general techniques I've seen. Why would I choose to use one over the other? Does performance differ...? Which one of these is the fastest / most efficient? (If it depends on implementation, when would I use each one?)</p>