Разница между функциями ROW_NUMBER() и RANK() в SQL заключается в следующем:
- ROW_NUMBER() присваивает уникальные возрастающие значения каждой строке, не обращая внимания на повторение значений выражения сортировки. habr.com Для строк с повторяющимися значениями номера присваиваются произвольно. stackoverflow.com
- RANK() присваивает ранг каждой строке в наборе результатов на основе указанного порядка. dev.to Строки с одинаковыми значениями получают одинаковый ранг, а последующие ранги корректируются с учётом связей, что приводит к пробелам в последовательности ранжирования. dev.to
Таким образом, ROW_NUMBER() не рассматривает значения строк для ранжирования и не создаёт связей или пробелов, а RANK() учитывает их и позволяет пробелам появляться. dev.to www.mssqltips.com