I think you want this, an **anti-semijoin** (also often called just **"anti-join"**). The ***"semi"*** because there is a join between a and b (in the subquery) but we only want and get rows from one table (b) in the result. The ***"anti"*** because we get rows from one table that do NOT have a related row in the other table.: select b.* -- show everything from table_b b -- from table b where not exists -- when ( select 1 -- there is nothing from table_a a -- in table a with where a.road_id = b.road_id -- same road, and a.year = b.year -- same year and and a.from_m < b.to_m -- overlapping and b.from_m < a.to_m -- (from, to) ) ; Test at [sqlfiddle.com][1]. [1]: http://sqlfiddle.com/#!4/151f26/2