There are two reasons why Activity Monitor would show duplicate rows in its Processes area, just like in the following screen capture:

ActivityMonitor

 

The first and most commonly known is if that session is executing a parallel query plan, where one or more iterators are being run by multiple worker threads. In that case, there will be one row for each of those worker threads. A piece of information we miss from that view, that would let us determine whether parallel execution is occurring would be the exec_context_id column of sys.dm_os_tasks.

The second and less commonly known reason for this to occur is because a given connection is using Multiple Active Result Sets (MARS). The piece of information we miss from this view, that would let us confirm that MARS is the reason for the duplicates is column net_transport from sys.dm_exec_connections. When MARS is being used, there will be multiple rows returned for the same session_id where the value of net_transport for all of them but one would be equal to Session, and for the only one row representing the actual physical connection, it would be equal to the actual protocol being used: Named Pipes, Shared Memory, TCP, or VIA.