I have a strong suspicion that your are getting way more output records than you expect. Consider this small example doing an inner join on two data sets with 5 records each.
data a;
input code value1;
datalines;
1 1
1 2
1 3
2 11
2 22
;
data b;
input code value2;
datalines;
1 15
1 25
1 35
2 111
2 222
;
proc sql;
create table example as
select a.*, b.value2
from a
inner join
b
on a.code=b.code
;
quit;
There are not 5 output records there are 13 because of multiple values of the code variable in each set. 3 values of 1 in each means there are 9 output records for code=1. So if you have any duplicates of debt_code in any set you get multiple output records for each match. With n duplicates of the the code value in one set and m duplicates in the second set you get n * m records for each code.
You may want to run proc freq on the debt_code variable in your two sets and consider just how many matches that will be.