What's the difference between xp_fixeddrives and this query
You're querying two different things here.

xp_fixeddrives will show you the amount of free space on the disk.

Using sys.dm views will tell you how much free space there is in the tempdb data file. If the data file is 50GB, then you're only using 5GB of it and the rest is empty. Even though it's empty, the file exists and is taking up 50GB of space on your drive.