Jenkins executes the Job on the same slave if the slave is available - if not, he will choose an other slave having the same 'label'
Labels can be used to 'group' your slaves by provided functionality (e.g. maven, selenium installed), each of your slaves can be assigned to multiple different Labels - you can define the required Labels in your Job config at 'Restrict where this project can be run'
There is also a plugin which allows you to select a different Slave for every execution:
https://wiki.jenkins-ci.org/display/JENKINS/NodeLabel+Parameter+Plugin
does this