For a _truly_ random selection, a method like this is needed.
Rnd() only returns a pseudo random sequence - and calling Randomize externally doesn't make any difference as Rnd() is run in a different scope within the query.
Thus, for a different selection for any run of the query, the random number must be generated externally after a call to Randomize:
Public Function RandomNumber( _
Optional ByVal booRandomize As Boolean) _
Static booRandomized As Boolean
If booRandomize = True Or booRandomized = False Then
booRandomized = True
RandomNumber = Rnd()
SELECT TOP 100
RandomNumber([Serial_F] Is Null);
The use of the ID in the parameter is needed to call RandomNumber not once but for every record.
Adjust 100 to the number of elements in the selection you wish to make.
Then adjust the query to join the other table.