Нельзя забывать, что информация о блокируемой записи в SQL Server хранится в памяти, а в Oracle - в самой записи в отдельном поле. И это запатентованная идея. И как бы не пыхтел Микрософт - не догнать ему Оракл в этом плане. Т.е. Оракл на блокировки вообще память не требует - а значит он может ее использовать по другому назначению.
Плюс, в SQL Server реализован "интеллектуальный" построитель плана запросов. Т.е. если программист делает выборку и не создал соответствующий индекс - то SQL Server пытается "догадаться" как строить план запроса. Это ему иногда удается, а иногда не удается. Отловить сию граблю естественно достаточно тяжело. Оракл - он тупой. Нет индекса - full scan. Это дисциплинирует программиста и заставляет при написании выборки сразу задуматься об индексах. Из-за этого тоже возможны проигрыши по производительности (и как следствие блокировок) в SQL Server.
Ну конечно - если код написан так, что будет блокировка - тут уже ничего не спасет - блокировка будет