Há uns dias coloquei aqui uma entrada onde pedia cuidado no código onde colocamos um ROWCOUNT.
Surgiu uma questão que deixo aqui respondida. Parece básica… e é, mas o que é básico para alguns não é necessariamente para outros.
Se não se lembram, colocar um print ou um select “para debug” pode (e altera) o nosso ROWCOUNT, bem como um begin/commit transaction.
A única diferença entre apagarmos linhas a menos ou criarmos um ciclo infinito está com o retorno do que, sem querer, acabamos por fazer ao nosso código.
Um print e um begin/commit transaction não devolve nenhum dataset, logo ROWCOUNT é 0.
Se fizermos
print 'aha!'

Apenas temos a tab “Messages”, não temos “Results”.
O mesmo acontece com um begin/commit transaction.
begin transaction
commit transaction

Se têm dúvidas e podem dizer que quee foi por ser um begin/commit sem nada lá dentro, podemos retirar já a dúvida.
create table #t1 (id int)
begin transaction
insert into #t1 values (1)
commit transaction

Agora se devolvermos um dataset…
select 'aha!'

Em resumo…
print 'aha!'
select @@rowcount as RC
select 'aha!'
select @@ROWCOUNT as RC
begin transaction
commit transaction
select @@ROWCOUNT as RC
