Трябва да принудите двигателя на базата данни да оценява нова стойност за всеки ред. Можете да направите това, като добавите фиктивна клауза where към външната таблица като:
DECLARE @city TABLE(ID INT IDENTITY(1, 1), City VARCHAR(100))
INSERT INTO @city VALUES
('Dallas'),
('New York'),
('Washington'),
('Las Vegas')
DECLARE @random TABLE(ID INT IDENTITY(1, 1), City VARCHAR(100))
INSERT INTO @random VALUES
('Manchester'),
('London'),
('Oxford'),
('Liverpool')
SELECT * FROM @city c
CROSS APPLY(SELECT TOP 1 * FROM @random r WHERE c.ID = c.ID ORDER BY NEWID()) ca
ако премахнете WHERE c.ID = c.ID
ще получите една и съща стойност за всички редове.