Descobrimos que sim, e, para nos dar a resposta definitiva em tempo de execução, usamos o db2pd.
Para quem não sabe, o db2pd é uma ferramenta usada para throubleshooting no db2, pois ela retorna rapidamente informações (falando de uma forma informal) do que está acontecendo no SGBD, desde uso do bufferpool, tablespaces a coisas relativas a rotinas administrativas, como runstats, reorgs e etc. Existe um amplo material sobre ele no Infocenter.
Bom, vamos parar de conversa e vamos começar a brincadeira.
$ db2 connect to sample
Database Connection Information
Database server = DB2/LINUX 9.5.5
SQL authorization ID = DB2INST1
Local database alias = SAMPLE
SQL authorization ID = DB2INST1
Local database alias = SAMPLE
Vamos executar o comando db2pd com os parâmetros necessários:
db2pd -db sample -dynamic
Joguei o output em um arquivo e procurei o MERGE do convdeskps( o merge foi alterado e coloquei nome de colunas e tabelas fakes ) :
Dynamic SQL Statements:
Address AnchID StmtUID NumEnv NumVar NumRef NumExe Text
0x00002AAD8D6768C0 78 4490601 1 1 2619 2619 MERGE INTO
T AS I USING (SELECT C1, C2, C3, C4, C5 FROM Z ) INDATA ( C1, C2, C3, C4, C5, C6 ) ON (I.C1 = INDATA.C1 AND I.C2 = C2 AND I.C3 = INDATA.C4) WHEN MATCHED THEN UPDATE SET C3 = INDATA.C3, C4 = INDATA.C4, C5 = INDATA.C5 WHEN NOT MATCHED THEN INSERT (C1, C2, C3, C4, C5) VALUES ( INDATA.C1, INDATA.C2, INDATA.C3, INDATA.C4, INDATA.C5, INDATA.C6) WITH UR
Depois disso, a partir do StmtUUID [ 4490601 ] , procurei na seção Dynamic SQL Environments
Dynamic SQL Environments:
Address AnchID StmtUID EnvID Iso QOpt Blk
0x00002AAD8D676D40 78 4490601 1 UR 5 B
Em negrito está o nível de isolamento do statement: UR
Sendo assim, realmente o DB2 está executando isso em Uncommited Read.