Olá Gabriel.
Acho que sua afirmação está equivocada.
Embora ambos os códigos eventualmente produzam os números 1, 2 ou 3, o primeiro código é mais seguro e previsível para garantir que o valor fique corretamente entre 1 e 3, já que a soma com 1 ocorre após a truncagem para 0, 1 ou 2. O segundo código pode ser confuso e não funciona tão bem se você precisar de um intervalo específico de forma clara.
Diferença:
Primeiro código (correto):
Math.random() gera um número decimal entre 0 (inclusive) e 1 (exclusive).
Math.random() * 3 gera um número entre 0 e 3, mas não incluindo 3.
O parseInt() arredonda esse valor para baixo, produzindo 0, 1 ou 2.
Depois, somamos 1 ao valor resultante, o que gera os números 1, 2 ou 3.
Segundo código (incorreto):
A diferença é que, nesse caso, o + 1 é aplicado depois de multiplicar por 3.
Isso significa que Math.random() * 3 + 1 gera um número entre 1 e 4 (mas sem incluir 4), e o parseInt() então arredonda esse número para baixo.
Como resultado, o valor pode ser 1, 2 ou 3 mas isso é apenas uma coincidência no intervalo em questão.
Qualquer duvida comente ai.
Bons estudos.