O que obtém a saída quando você executa which sem -a é aquele que será executado. (e o segundo com -a é o preferido em relação ao terceiro).
Isso não leva em consideração os builtins, aliases e funções do shell que serão executados (a partir do shell) antes de qualquer outro executável.
Portanto, é melhor usar type .