>>IF myfield.myvalue && is the value .t.? >>>>
>>IF (NVL(myfield.myvalue,.F.)) >>>
>SELECT * FROM TableA WHERE PK NOT IN(SELECT PK FROM TableB) ... >>
>SELECT * FROM TableA WHERE PK NOT IN(SELECT PK FROM TableB WHERE NOT ISNULL(PK)) ... >>
SET NULL ON CLOSE TABLES ALL CREATE CURSOR TableA (pk i) INSERT INTO TableA VALUES (1) INSERT INTO TableA VALUES (2) INSERT INTO TableA VALUES (null) CREATE CURSOR TableB (pk i) INSERT INTO TableB VALUES (1) INSERT INTO TableB VALUES (null) * vfp8sp1 : 2,null (IS A BUG) * vfp9sp1 : none SELECT * FROM TableA WHERE NOT PK IN (SELECT PK FROM TableB) * equal direct form * vfp8sp1 : none * vfp9sp1 : none (IS A SERIOUS BUG) SELECT * FROM TableA WHERE NOT PK IN (1,null) * PROOF: REWRITE IT IN EXPLICIT FORM * vfp8sp1 : none * vfp9sp1 : none SELECT * FROM TableA WHERE (NOT (PK=1 OR PK=NULL))=.T. * remove null in conditional set * vfp8sp1 : 2,null (IS A BUG) * vfp9sp1 : 2 SELECT * FROM TableA WHERE NOT PK IN (SELECT PK FROM TableB WHERE PK IS NOT NULL) * equal direct form * vfp8sp1 : 2 * vfp9sp1 : 2 SELECT * FROM TableA WHERE NOT PK IN (1) * PROOF: REWRITE IT IN EXPLICIT FORM * vfp8sp1 : 2 * vfp9sp1 : 2 SELECT * FROM TableA WHERE (NOT (PK=1))=.T.