为什么这个SELECT ... JOIN语句没有返回结果?

Ste*_*hen 1 mysql sql select timestamp left-join

我有两个表:
1.tableA是一个包含许多列的记录列表.有一个名为"created"的时间戳列
2. tableB用于跟踪我的应用程序中已锁定tableA中的记录以供审阅的用户.它由四列组成:id,user_id,record_id和另一个时间戳列.

我正在尝试从tableA中选择最多10条记录,这些记录尚未被tableB中的任何人锁定以供查看(我还在tableA中的一些其他列中过滤WHERE子句,如记录状态).这是我到目前为止所提出的:

SELECT tableA.* FROM tableA
  LEFT OUTER JOIN tableB ON tableA.id = tableB.record_id WHERE
  tableB.id = NULL AND
  tableA.status = 'new' AND
  tableA.project != 'someproject' AND
  tableA.created BETWEEN '1999-01-01 00:00:00' AND '2010-05-06 23:59:59'
  ORDER BY tableA.created ASC LIMIT 0, 10;
Run Code Online (Sandbox Code Playgroud)

tableA中目前有几千条记录,tableB中有零条记录.肯定有这些时间戳之间的记录,我用简单的方法验证了这一点

SELECT * FROM tableA WHERE  
created BETWEEN '1999-01-01 00:00:00' AND '2010-05-06 23:59:59'  
Run Code Online (Sandbox Code Playgroud)

上面的第一个语句返回零行,第二个语句返回超过2,000行.

Mar*_*ith 6

tableB.id = NULL 
Run Code Online (Sandbox Code Playgroud)

应该

tableB.id IS NULL 
Run Code Online (Sandbox Code Playgroud)

它永远不会是真的(也不是假的.NULL = NULL计算为未知,因此tableB.id <> NULL同样不会返回任何结果).

请参阅http://dev.mysql.com/doc/refman/5.0/en/working-with-null.html,为什么NULL = NULL在SQL Server中评估为false