I am using Microsoft SQL Server 2017 on my local machine. I have a 10,000,000 row table and self joined to test 5 times each:
SELECT count(*) FROM [dbo].[Test] t1
INNER JOIN [dbo].[Test] t2 ON t1.ID=t2.ID
--Avg execution time: 1563.4000
SELECT count(*) FROM [dbo].[Test] t1
LEFT JOIN [dbo].[Test] t2 ON t1.ID=t2.ID
WHERE t2.ID IS NOT NULL
--Avg execution time: 1547.6000
SELECT count(*) FROM [dbo].[Test] t1
LEFT JOIN [dbo].[Test] t2 ON 1=1
WHERE t1.ID=t2.ID
--Avg execution time: 1536.8000
So, in a simple query they seem to perform almost identically and when comparing the execution plans, the plans were found to be the same. I would not count on the optimizer always generating identical plans between these styles and it is a poor way to write SQL. If it is a guaranteed relationship, use an inner join.