Which behavior you get depends on a few things: CPU drivers, power management settings, CPU-specific scheduler tweaks, application settings, context switch frequency, overall CPU load, etc.
Performance optimization wants to minimize context switches by leaving threads on the same core as much as possible. Power management wants to run everything on a single core as much as possible to avoid waking up other cores. On a system with aggressive power management, sub-100% single-core load and low enough interrupt rate that the OS does not need to wake up other cores to service interrupts, there are cases where all load lands on a single core.
With more performance-oriented profiles, threads that get yanked out of one core get re-scheduled to whichever core becomes available at the next opportunity and you get more evenly distributed load unless the user or application specifies otherwise.