SQL Server has this great feature of updatable CTEs and subqueries. So, you can do this as:
with todelete as (
select t.*,
row_number() over (partition by id order by value2 - value1) as diff_seqnum
from table t
)
delete from todelete
where diff_seqnum > 1;
That is, enumerate the rows for each id based on the difference in the two values. Then, only keep the rows where the sequence number is 1
.