Eso es porque dbms_random()
se llama para cada fila, por lo que puede generar resultados duplicados. En cambio, si desea una fila aleatoria, intente algo como esto:
select tid
from (select tid,
row_number() over (order by dbms_random.value()) as seqnum
from Train
) t
where seqnum = 1;
Esto siempre devolverá la fila con "seqnum =1", pero será un tid
aleatorio .