Yea, quite often it will include the Null interface, doesn't bother me much, but try this instead...
SELECT COUNT(InterfaceDescription) AS NumPorts, N.Caption
FROM NCM.Interfaces I JOIN Orion.Nodes N ON (I.Node.CoreNodeID = N.NodeID)
WHERE NOT ((InterfaceTypeName like '%Virtual%') OR (InterfaceTypeName = 'other'))
GROUP BY N.NodeID, N.Caption
ORDER BY NumPorts DESC