SELECT * en ABAP: Por qué deberías evitarlo y qué hacer en su lugar

Cuando empiezas en ABAP, es muy común escribir consultas así:

SELECT * FROM vbak INTO TABLE lt_vbak.

Es rápido, funciona y parece cómodo. El problema es que, aunque funcione, no es la mejor opción. Está considerado como una mala práctica.

¿Qué hace SELECT *?

SELECT * significa: «Tráeme TODAS las columnas de esta tabla». Y aquí está el problema. Muchas tablas SAP tienen decenas o incluso cientos de campos, como por ejemplo vbak o ekpo. Entonces si haces SELECT * y la tabla tiene 200 campos, te traerá 200 campos, aunque solo necesites 3.

Por ejemplo: Si seleccionas 10.000 filas de VBAK con SELECT *, estás trayendo 150 columnas × 10.000 filas de datos. Si solo necesitas 2 columnas, estás obteniendo 75 veces más información de la necesaria. Eso es tráfico de red, memoria y tiempo desperdiciado.

¿Por qué es una mala práctica?

Hacer SELECT * es una mala práctica porque:

  • Obtienes datos innecesarios. Y eso hace que la base de datos trabaje más.
  • Consume más memoria. Cuantos más campos obtienes, más memoria ocupa la tabla interna, más datos se cargan en la memoria RAM y más pesado se vuelve el programa.
  • Peor rendimiento. Obtener columnas innecesarias implica más lectura desde base de datos, más transferencia de datos y más tiempo de procesamiento.
  • Dificulta el mantenimiento de código. Un SELECT * no te dice qué datos necesita realmente el programa. Si alguien tiene que modificar tu código un año después, tendrá que adivinar qué campos se usan y cuáles no.

¿Qué hacer en lugar de SELECT *?

En vez de obtener todos los campos, especifica SOLO los campos que vas a usar. Ejemplo:

" ❌ MAL: Trae 150 columnas
SELECT * FROM vbak INTO TABLE lt_vbak.

" ✅ BIEN: Trae solo las 2 columnas que necesitas
SELECT vbeln erdat FROM vbak INTO TABLE lt_vbak.

Utiliza SELECT * solo cuando necesitas literalmente todas las columnas de la tabla, y sepas que las utilizaras todas.

Además, lo bueno de seleccionar solo los campos específicos es:

  • Mejor rendimiento. Menos datos se transfieren entre la base de datos y la aplicación.
  • Menor consumo de memoria. Las tablas internas ocupan menos espacio.
  • Código más claro. El SELECT documenta automáticamente qué datos usa el programa.
  • Mejor mantenibilidad. Si la tabla cambia en el futuro, tu programa depende únicamente de los campos que realmente necesita.
  • Mejor escalabilidad. La diferencia entre un programa rápido y uno lento muchas veces está en pequeños detalles como este.

SELECT * parece cómodo al principio. Pero en SAP, donde trabajamos con tablas enormes y grandes volúmenes de información, recuperar datos innecesarios puede afectar muchísimo al rendimiento.

Seleccionar solo los campos necesarios hace que tu código sea más profesional, más rápido, más limpio y más mantenible.