You are returning null because you are assuming tbl1 holds the value however, tbl1 could hold it since this is a full join, not a left join. I assume your line 16 was an insert to tbl1 so I changed it.
use [gsgui]
DECLARE @tbl1 TABLE
(SID int,
SName varchar(10),
SType varchar(10),
SAmount DECIMAL(9,2))
DECLARE @tbl2 TABLE
(SID int,
SName varchar(10),
SType varchar(10),
SAmount DECIMAL(10,2))
INSERT INTO @tbl1 VALUES (1001,'ABCDE','CASH',20.00)
INSERT INTO @tbl1 VALUES (1002,'XYZ','CASH',40.00)
INSERT INTO @tbl1 VALUES (1004,'XYZ','NSD',80.00)
INSERT INTO @tbl1 VALUES (1008,'PPPPPP','TRD',75.00)
INSERT INTO @tbl2 VALUES (1003,'ABCDE','UST',100.00)
INSERT INTO @tbl2 VALUES (1004,'XYZ','NSD',30.00)
INSERT INTO @tbl2 VALUES (1006,'PQRS','CASH',100.00)
INSERT INTO @tbl2 VALUES (1007,'ZZZZZ','CASH',30.00)
SELECT
ISNULL(t.SID,s.SID) SID,
ISNULL(t.SName,s.SName) SName,
ISNULL(t.SType,s.SType) SType,
ISNULL(t.SAmount,0) + ISNULL(s.SAmount,0) Amount
FROM @tbl2 t
FULL JOIN @tbl1 s
ON t.SID = s.SID
WHERE (t.SType <> ('CASH') OR s.SType <> ('CASH'))
You can see where your nulls are affecting you by simply selecting all and reviewing the null columns:
SELECT *
FROM @tbl2 t
FULL JOIN @tbl1 s
ON t.SID = s.SID
WHERE (t.SType <> ('CASH') OR s.SType <> ('CASH'))