Um
OUTER JOIN
não funcionará aqui, porque você não deseja ter todos os elementos da tabela2, mas apenas aqueles em que existe um elemento correspondente na tabela 1. Você gostaria de fazer algo assim:
SELECT tbl1.province, tbl1.district, tbl1.commune, tbl1.village
FROM dbo.table2 AS tbl2
INNER JOIN dbo.table1 AS tbl1
ON tbl1.province = tbl2.province_id
AND tbl1.district = tbl2.district_id
AND (tbl1.commune is NULL OR (tbl1.commune = tbl2.commune_id))
AND (tbl1.village is NULL OR (tbl1.village = tbl2.village_id))