Estás usando una consulta like sin comodines. Y otras no estaban cerradas.
Para que no te los repita usa Distinct
Código PHP:
sql="SELECT DISTINCT idcliente FROM ventas"
rs.open sql,conexion
do while not rs.eof
sql="SELECT id,nombre,direccion,rfc FROM clientes WHERE id="&rs("idcliente")&""
rs2.open sql,conexion
response.write("<br>")
do while not rs2.eof
response.write("Cliente: "&rs2("nombre")&" "&"Direccion: "&rs2("direccion")&" "&"RFC: "&rs2("rfc")&"<br>")
sql="SELECT numfact,idcliente FROM factura WHERE idcliente="&rs2("id")""
rs3.open sql,conexion
do while not rs3.eof
response.write("Factura: "&"<br>")
response.write(rs3("numfact")&"<br>")
sql="SELECT * FROM facturadetalle WHERE numfact like '%"&rs3("numfact")&"%'"
rs4.open sql,conexion
response.Write("Productos: "&"<br>")
do while not rs4.eof
response.write("Tipo: "&rs4("tipo")&" "&"Clave Producto: "&rs4("claveprod")&"<br>")
rs4.movenext
loop
rs4.close
rs3.movenext
loop
rs3.close
rs2.movenext
loop
rs2.close
rs.movenext
loop
%>
Suerte