Sua explicação não se correlaciona com sua consulta. Você mencionou
"No entanto, também preciso incluir uma cláusula where, mas... ainda quero que uma linha da tabela à esquerda seja retornada para cada registro na tabela à esquerda, mesmo que a condição na cláusula where seja não atendido. "
Então, acredito que sua consulta seja algo assim
SELECT a.*,
b.*
FROM a
LEFT OUTER JOIN b
ON a.vin = b.vin
WHERE Trunc(a.rep_open_date) BETWEEN Trunc(b.check_in_date) + 1 AND
Trunc(b.check_in_date) - 1
Acima, o
LEFT OUTER JOIN
será convertido em INNER JOIN
devido à filtragem da tabela direita em Where
cláusula Então, como você usou na primeira consulta, os filtros de tabela corretos devem fazer parte de
JOIN
condição, que retornará linhas da tabela ESQUERDA mesmo que não haja registros correspondentes na tabela lateral DIREITA. SELECT a.*,
b.*
FROM a
left outer join b
ON a.vin = b.vin
AND Trunc(a.rep_open_date) BETWEEN
Trunc(b.check_in_date) + 1 AND
Trunc(b.check_in_date) - 1
Atualizar:
Você usou entre o operador como
10 between 11 and 9
mas deve ser 10 between 9 and 11
SELECT a.*,
b.*
FROM a
left outer join b
ON a.vin = b.vin
AND CAST(a.rep_open_date as date) BETWEEN
CAST(b.check_in_date as date) - 1 AND
CAST(b.check_in_date as date) + 1