Su explicación no se corresponde con su consulta. Has mencionado
"Sin embargo, también necesito incluir una cláusula where pero... Todavía quiero que se devuelva una fila de la tabla de la izquierda para cada registro en la tabla de la izquierda, incluso si la condición en la cláusula where es no cumplido. "
Así que creo que su consulta se parece a esto
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
En lo anterior, LEFT OUTER JOIN
se convertirá en INNER JOIN
debido a la filtración de la tabla derecha en Where
cláusula
Entonces, como usó en la primera consulta, los filtros de tabla correctos deben ser parte de JOIN
condición, que devolverá filas de la tabla IZQUIERDA aunque no haya registros coincidentes en la tabla del lado DERECHO.
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
Actualización:
Ha utilizado entre operadores como 10 between 11 and 9
pero debería 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