How to do a db api join on "has no value"?
If I am reading this right, I think you need to use a left join and then test the nullness.

$the_query = db_select('foo', 'f');
  -&gt;fields('f', array('nid', 'val'))

$the_query-&gt;leftJoin('bar', 'b', 'f.nid = b.col');

$results = $the_query-&gt;isNull('b.col');
  -&gt;execute()
  -&gt;fetchAll();


Very often, though, I will break down and do this with two queries.  The first will get a list of nids, the second will use a NOT IN condition.