You didn't show us what query you did use. Nevertheless...
To get desired result, you have to get all distinct dates and
EmpNum
's from both tables. See:
SET DATEFORMAT dmy;
CREATE TABLE Shift
(
Empnum varchar(50),
punchdate date,
shift decimal(5,1)
);
CREATE TABLE Leave
(
Empnum varchar(50),
LeaveDate date,
leaveFN decimal(5,1),
LeaveAF decimal(5,1)
);
INSERT INTO Shift (Empnum, punchdate, shift)
VALUES('Test1', '01/09/2020', 1),
('Test1', '03/09/2020', 0.5),
('Test2', '01/09/2020', 1),
('Test2', '02/09/2020', 1)
INSERT INTO Leave(Empnum, LeaveDate, leaveFN, LeaveAF)
VALUES('Test1' , '02/09/2020', 0.5, 0.5),
('Test1', '03/09/2020', 0, 0.5)
;WITH CTE AS
(
SELECT punchdate AS CurrentDate
FROM Shift
UNION ALL
SELECT LeaveDate As CurrentDate
FROM Leave
), Emps AS
(
SELECT EmpNum
FROM Shift
UNION ALL
SELECT EmpNum
FROM Leave
)
SELECT c.Empnum, c.CurrentDate,
COALESCE(s.shift, 0) shift,
COALESCE(l.leaveFN, 0) leaveFN,
COALESCE(l.leaveAF, 0) leaveAF
FROM
(
SELECT DISTINCT cc.CurrentDate, ee.EmpNum
FROM CTE cc CROSS JOIN Emps ee
) c LEFT JOIN Shift s ON c.CurrentDate = s.punchdate AND c.EmpNum = s.EmpNum
LEFT JOIN Leave l ON c.CurrentDate = l.LeaveDate AND c.EmpNum = l.EmpNum
Result:
Empnum CurrentDate shift leaveFN leaveAF
Test1 2020-09-01 1.0 0.0 0.0
Test2 2020-09-01 1.0 0.0 0.0
Test1 2020-09-02 0.0 0.5 0.5
Test2 2020-09-02 1.0 0.0 0.0
Test1 2020-09-03 0.5 0.0 0.5
Test2 2020-09-03 0.0 0.0 0.0 <- missing record for Test2, which means no corresponding data in Shift and Leave table for 03/09/2020
db<>fiddle[
^]
Good luck!