Исследование показало, что QRelationalTableMode.selectStatement возвращает запрос следующего вида:
SELECT tbl.fld1,
relTblAl_1.fld1 AS reftbl1_fld1_2,
relTblAl_2.fld1,
relTblAl_3.fld1,
tbl.fld2,
tbl.fld3,
FROM tbl,
reftbl1 relTblAl_1,
reftbl1 relTblAl_2,
reftbl2 relTblAl_3
WHERE ( tbl.fkfld1 = relTblAl_1.pkfld
AND tbl.fkfld2 = relTblAl_2.pkfld
AND tbl.fkfld3 = relTblAl_3.pkfld )
ORDER BY tbl.sortfld ASC
Это INNER JOIN, который действительно не выбирает строки с пустыми ссылками. Выход напрашивается - переписать selectStatement, что бы он возвращал правильный запрос, использующий LEFT JOIN. Тогда выберутся все строки таблицы.