It's somewhat documented in the Readme.htm on VFP installation CD:
"Left Outer Join returns zero records on nulls. If a Left Outer Join uses Upper(), and the variable is null, zero records will be returned. This is a change from the incorrect behavior in Visual FoxPro 6.0, which returned a single record. Because there were several instances where SQL SELECT statements could return incorrect result sets in previous versions of Visual FoxPro, several changes were made in Visual FoxPro 7.0. You should verify that your SQL SELECT statements return expected result sets".
>There appears to have been a change in the behaviour of SQL - SELECT when using a WHERE clause in a Left/Right outer join. An example is shown below. Surpringly, this behaviour change is not noted in the "What's new in Visual FoxPro" documentation released with VFP7. Does anyone know if this was an intentional but undocumented change or not? The new behaviour seems to make sense but I imagine it would break some existing code as we have unfortunately discovered. > < snip >