CLEAR * SET COLLATE TO "DUTCH" * SET COLLATE TO "GERMAN" * ... * condition 1 : COLLATE not MACHINE SET COLLATE TO "GENERAL" * condition 2 : SET DELETED() ON SET DELETED ON *-- Create Tables and Index CREATE TABLE table1 (field1 C(1), field2 C(1)) INSERT INTO table1 (field1,field2) VALUES("A","1") INSERT INTO table1 (field1,field2) VALUES("A","2") INSERT INTO table1 (field1,field2) VALUES("A","3") * condition 3 : first table can optimize WHERE DELETED() *INDEX ON field1 FOR NOT DELETED() TAG FIELD1_1 INDEX ON DELETED() TAG deleted1 && BINARY CREATE TABLE table2 (field1 C(1), field2 C(1)) INSERT INTO table2 (field1,field2) VALUES("A","1") INSERT INTO table2 (field1,field2) VALUES("B","1") * condition 4 : SECOND table can optimize WHERE DELETED() INDEX ON DELETED() TAG deleted2 BINARY SYS(3054,11) * condition 5 : none WHERE clause *-- Expected recordCount = 1 ; result recordCount = 3 *** USES ONLY table1.field1=table2.field1 SELECT COUNT(*) recordCount FROM table1 INNER JOIN table2 ON ; table1.field1=table2.field1 AND table1.field2=table2.field2 ? ? "LOOK THE PARTIAL !!!!" * WORKAROUND SELECT COUNT(*) recordCount FROM table1 INNER JOIN table2 ON ; table1.field1=table2.field1 AND table1.field2=table2.field2; WHERE .T. *-- Expected recordCount = 1 ; result recordCount = 2 *** USES ONLY table1.field2=table2.field2 SELECT COUNT(*) recordCount FROM table1 INNER JOIN table2 ON ; table1.field2=table2.field2 AND table1.field1=table2.field1 ? ? "LOOK THE PARTIAL !!!!" * WORKAROUND SELECT COUNT(*) recordCount FROM table1 INNER JOIN table2 ON ; table1.field2=table2.field2 AND table1.field1=table2.field1; WHERE .T.