Are your header and detail tables joined with a Left Outer Join? If not, you need to make sure that the link is FROM the header TO the detail - not the other way around. Right-click on the link and select Link Options, then select Left Outer Join and click on OK. This will get you all of the records from the header table, whether or not they have a record in the detail table.
The other piece of this has to do with your selection criteria. If you have fields from the detail table in your selection criteria, you'll need to edit the selection formula to look like the following:
IsNull({detail.key_field}) OR
(
{detail.field1} = 'Blah' and
{detail.field2} = 123
)
Be sure to use the parentheses. Also, the check for the null value MUST happen prior to the conditions that contain the detail fields. In the database, comparisons against a null value result in null, NOT true or false. Since evaluation of a series of boolean statements ends as soon as a specified condition is not met and null does not meet the condition at any time (even in a "not equal to" comparison!) it will never get to the check for null if you put it at the end of the statement.
-Dell