The trick to find out if SQL is running on a physical server or a VM is to read the ERRORLOG. Every time SQL starts (or the ERRORLOG is recycled), the "system manufacturer" is logged.
If it says "VMWare, Inc", then the server is running in a virtual environment. If it doesn't say "VMWare, Inc". then it's a physical server.
exec sp_readerrorlog 0,1,'System Manufacturer'
Example
This server is running on a Virtual Machine:
This Server is running on a Physical Machine (and the server was made by IBM):