I have these 3 tables:

and I’m using this code to join them together (I’m using Delphi):
ADOQ.SQL.Text := 'select a.IdArt as [Code d''Article], '+
'a.Nom,'+
'Str(a.Prix)+" TND" as Prix, '+
'(select Str(sum(QteEntree))+" "+a.unit from Stock where IdArt = a.IdArt group by IdArt) as [Quantite Entree],' +
'(select Str(sum(Qte))+" "+a.unit from Sold where IdArt = a.IdArt group by IdArt) as [Quantite Vendu],'+
'Str((select sum(QteEntree) from Stock where IdArt = a.IdArt group by IdArt) -' +
'(select sum(Qte) from Sold where IdArt = a.IdArt group by IdArt))+" "+a.unit as [Quantite Existe]'+
'from Article a ';

As you can see, when there is a missing record from one table, it returns Null to the DbGrid,
so I want to replace that missing record with “0”.
I tried this code:
ADOQ.SQL.Text := 'select a.IdArt as [Code d''Article], '+
'a.Nom,'+
'Str(a.Prix)+" TND" as Prix, '+
'(select Str(sum(QteEntree))+" "+a.unit from Stock where IdArt = a.IdArt group by IdArt) as [Quantite Entree],' +
'(select IIF( IsNull(sum(Qte)), "111" , Format( sum(Qte),"00.00") ) from Sold where IdArt = a.IdArt group by IdArt) as [Quantite Vendu],'+
'Str((select sum(QteEntree) from Stock where IdArt = a.IdArt group by IdArt) -' +
'(select sum(Qte) from Sold where IdArt = a.IdArt group by IdArt))+" "+a.unit as [Quantite Existe]'+
'from Article a ';
but nothing changed, although this code works perfectly :
ADOQ.SQL.Text := 'Select a.IdArt,IIF(( IsNull( s.qte) ), "00,00" , Format( (s.qte),"00.00") ) from Article a left join sold s on s.IdArt = a.IdArt';

What am I doing wrong here?
ok found the solution :