This query (joining sys.dm_exec_sessions to sys.dm_exec_requests) is functionally different from querying sys.sysprocesses.
sys.sysprocesses has the current database context for every session (regardless of whether there are any currently-executing requests).
However, joining to sys.dm_exec_requests means that you will only get results for sessions with currently-executing requests.
You'll get fewer roes using sys.dm_exec_requests, and potentially filter out valid results.
As of now, I think that the dbid data in sys.sysprocesses is uniquely available in that view, and not available in any other 2012 DMV.