In a VB6 program accessing an MDB file, the following SQL query is being executed:
> Select * FROM [table1] WHERE ([type] = 1 OR [type] = 2 OR [type] = 6)
DAO 3.51 is way outdated. It was replaced by DAO 3.6 many years ago. Use 3.6 instead and then see whether this version of your query returns the same results from both DAO 3.6 and ACEDAO:
SELECT *
FROM [table1]
WHERE
[type] IN (1,2,6)
AND ([notes] Is Null OR [notes] = '0')
AND [date] >= cvdate('09/03/2013')
ORDER BY [date], [column2];
WHERE ... [notes] = Null
is non-standard SQL. Null propagation can potentially force any expression involving Null
to return Null
. Therefore the expression [notes] = Null
(which you intended to be a boolean expression) could very well return Null
, which is neither True
nor False
.
How the query processor handles that Null
value may indeed differ from one database engine to another: it could interpret Null
as False
, or it could just ignore the result, or it could trigger an error. Note also that null propagation could collapse your entire WHERE clause to Null
if...
(some other condition) AND (Null)
...evaluates to Null
.
Standard SQL would be ([notes] IS NULL)
and a Jet/ACE equivalent would be IsNull([notes])
. Both of these will always return either True
or False
.