How to find missing data from one table that is a join of two other tables
You need all combinations from the two tables, so a CROSS JOIN and then remove the ones in the 3rd table, using either NOT EXISTS or EXCEPT:

SELECT 
    s.stockcode, l.locno
FROM
    dbo.stock AS s
  CROSS JOIN
    dbo.location AS l

EXCEPT

SELECT 
    si.fkstockcode, si.fklocno
FROM 
    dbo.stock_loc_info AS si ;