If there are other columns beside the ID, TS and DT of interest on the tables, then windowing functions are appropriate:
WITH -- Oracle 12c example
a ( id, dt ) AS ( SELECT
1, DATE'2016-09-17' FROM DUAL UNION ALL SELECT
2, DATE'2008-02-02' FROM DUAL
),
b ( id, ts ) AS ( SELECT
1, to_timestamp('17-SEP-16 12.50.40.754543000 PM', 'dd-MON-yy hh.mi.ss.ff9 AM') FROM DUAL UNION ALL SELECT
1, to_timestamp('19-SEP-16 12.56.40.754543000 PM', 'dd-MON-yy hh.mi.ss.ff9 AM') FROM DUAL UNION ALL SELECT
2, to_timestamp('02-FEB-08 10.31.36.154000000 PM', 'dd-MON-yy hh.mi.ss.ff9 AM') FROM DUAL UNION ALL SELECT
2, to_timestamp('02-FEB-08 10.31.32.284000000 PM', 'dd-MON-yy hh.mi.ss.ff9 AM') FROM DUAL
),
join_and_rank AS (
select a.id, a.dt, b.ts
, ROW_NUMBER() OVER ( PARTITION BY a.id
ORDER BY b.ts DESC ) r#
from a
join b
on a.id = b.id
and a.dt <= b.ts
and a.dt + 1 > b.ts
)
select * from join_and_rank
where r# = 1;
ID DT TS r#
-- ------------------- ----------------------------- --
1 2016-09-17 00:00:00 2016-09-17 12:50:40.754543000 1
2 2008-02-02 00:00:00 2008-02-02 22:31:36.154000000 1