I have 2 tables - reservation:
reservation
id | some_other_column ----+------------------ 1 | value 2 | value 3 | value
Just for completeness (and I honestly believe it fits better), I encourage you to use a simple NOT EXISTS.
NOT EXISTS
SELECT * FROM reservation R WHERE NOT EXISTS ( SELECT 1 FROM reservation_log WHERE reservation_id = R.id AND change_type = 'cancel' );