Select records in one table but not in another, when the second table is not matching on primary key
MySQL, in fact, all SQL products really barf at
c.id=NULL

It causes confusion. You really mean
c.id IS NULL

You need to change it to
SELECT count(*) FROM list l LEFT OUTER JOIN cardinal c ON l.sku=c.sku where c.id is null;

Give it a Try !!!
ABOUT YOUR QUESTION
Your first query
SELECT count(*) FROM list l LEFT JOIN cardinal c ON c.id=null;

resembles a natural join where nothing matches on the cardinal table, so the count 2677513 is correct.
Your second query
SELECT count(*) FROM list l LEFT OUTER JOIN cardinal c ON l.sku=c.sku where c.id=null;

is little more explicit, but the c.id=null makes it fail, thus getting 0 as a count.