No, the subquery will return more than 1 value when 'clientid = 1' is not in the where clause. Furthermore, based on the clause I would expect the L1 string to be removed from positions 3+4 and 7+8. I only want 7+8 removed.
Try this with my original query. Your query won't make the necessary changes.
create table main1
(clientid numeric(18,0) not null, volser varchar(15) not null)
insert into main1 (clientid, volser) values (1,'000003L1')
insert into main1 (clientid, volser) values (1,'00L103L1')
insert into main1 (clientid, volser) values (1,'00L103')
insert into main1 (clientid, volser) values (2,'000003L1')
insert into main1 (clientid, volser) values (2,'00L103L1')
insert into main1 (clientid, volser) values (2,'00L103')
update main1
set main1.volser = replace(main1.volser, substring(main1.volser,7,2),'')
where clientid = 1 and len(main1.volser) = 8 and substring(main1.volser,7,2) in ('L1')
select * from main1
drop table main1